私はcakephp 2.3.0を使用しています。かなり長い間マニュアルを検索しましたが、google/stackoverflow も検索しました。
私はまだcakephpに少し慣れていません。私は $hasAndBelongsToMany (多対多) が機能するように取り組んできましたが、実際に機能しました...ワフー。しかし、同じモデルでは、以下のシナリオを機能させることができません。
Activity モデルと User モデルがあります。アクティビティには多数のユーザーが含まれる場合があります。ユーザーは多くのアクティビティを持つことができます。しかし、アクティビティのリストを、アクティビティの所有者とともに、すべて表の 1 行に Web ページに表示したいと考えています。
アクティビティ テーブルには、特に次の列が含まれます。
- ID
- 名前
- 状態
- owner_fk (Users.id への外部キー)
ユーザー テーブルには、特に次の列が含まれます。
- ID
- ユーザー名
- パスワード
- 役割
私のSQLは次のようになります:
select usr.username, actv.name
from users usr, activities actv
where usr.users_id = actv.owner_fk
アクティビティ モデル(ユーザー モデルには同様のコードがあります):
class Activity extends AppModel {
var $name = 'Activity';
public $hasAndBelongsToMany = array(
'User' =>
array(
'className' => 'User',
'joinTable' => 'activities_users',
'foreignKey' => 'activities_id',
'associationForeignKey' => 'users_id',
'unique' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
たとえば、同じモデルに $hasOne があり、$hasAndBelongsToMany がある場合など、CakePHP が同じモデルで混合/一致を許可するかどうかはわかりません。私がやろうとしていることを達成するための簡単な方法、および/またはベストプラクティスがおそらくあります。私はいくつか実験しましたが、今のところ運がありません。
コントローラーの以下のコードで何かをしたいと思いますが、上記の SQL の where 句などの条件を使用します。
$this->set('results', $this->Activity->find('all'));