包含可能な動作がどのように機能するか、または関連付けられたモデルから (およびそれに基づいて) データを取得する方法を理解できないようです。
次の MySQL クエリを Cakephp の find('all') 関数に入れる必要があります。SQL 構文にクエリ ビルダーを使用できることはわかっていますが、find 関数を使用して、その仕組みを理解したいと考えています。
SELECT events.id, events.name FROM events, user_roles
WHERE user_roles.event_id = events.id
AND user_roles.user_id = 1
考え方は単純で、user_roles には user_id、role_id、および event_id が格納されます。ここで、特定のユーザー (ここでは user_id = 1) のすべてのイベントを取得したいと考えています。私は次のいくつかのバリエーションを試しました:
$data = $this->Event->find('all',array(
'contain' => array(
'UserRole' => array(
'fields' => array('id'),
'conditions' => array(
'UserRole.user_id' => $this->Auth->user('id')
)
)
)
));
しかし、これはすべてのイベントを返し続けます。私が欲しいのは、次のような配列です(または、同じ関連データを持つ他の結果):
array(
[0] => array(
[Event] => array(
'id' => 1,
'name' => 'Event Name'
),
[UserRole] => array(
'role_id' => 2,
'event_id'=> 1
)
[1] => array(
.... etc ...
)
次のモデルと関連付けが定義されています
class Event extends AppModel {
public $hasMany = array(
'UserRole' => array(
'className' => 'UserRole',
'foreignKey' => 'event_id',
'dependent' => false,
)
)
)
class UserRole extends AppModel {
public $belongsTo = array(
'Event' => array(
'className' => 'Event',
'foreignKey' => 'event_id'
),
)
)
それで、それはどのように機能しますか;)。
編集:
AppModel.php で設定したことを忘れていました。
public $recursive = -1;