クエリしようとしているテーブルが 3 つあります。現在、CakePHP は Visits と Guests からのみデータを引き出しています。
Visits
id | guest_id | room_id | arrival_date
Guests
id | name | user_id
Rooms
id | user_id | description
訪問を照会するときに、3 つすべての情報を取得しようとしています
$visits = $this->paginate('Visit', array(
'arrival_date >=' => $date,
'room.user_id' => $user_id
)
);
これが私のモデルでの関係です
モデルを訪問
public $hasOne = array(
'Guest' => array(
'foreignKey' => 'id'
),
'Room' => array(
'foreignKey' => 'id'
)
);
ルームモデル
public $belongsTo = array( //user creates a room
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public $hasMany = array(
'Visit' => array(
'foreignKey' => 'visit_id',
),
);
sql_dump を使用すると、すべてのクエリで、部屋の結合が次のように表示されます
LEFT JOIN `TestReservations`.`rooms` AS `Room` ON (`Room`.`id` = `Visit`.`id`)
Room.id = Visit.room_id である必要があります
部屋モデルの hasOne リレーションを誤って room_id に変更してしまい、"Room.room_id = visit.id" として結合されていることに気付きました。この外部キーは明らかにこれを介して設定されているのに、なぜ訪問モデルにないのでしょうか?