[英]CakePHP seems to ignore foreign key
我有三個要查詢的表。 目前,CakePHP僅從“訪問”和“來賓”中提取數據,正如我將要解釋的那樣,它錯誤地加入了“房間”。
Visits
id | guest_id | room_id | arrival_date
Guests
id | name | user_id
Rooms
id | user_id | description
查詢訪問時,我試圖獲取有關所有三件事的信息
$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時,它會顯示Room的連接為
LEFT JOIN `TestReservations`.`rooms` AS `Room` ON (`Room`.`id` = `Visit`.`id`)
它應該是Room.id = Visit.room_id
我不小心將房間模型中的hasOne關系更改為room_id,並發現它以“ Room.room_id = visit.id”的形式加入。 顯然是通過此方式設置了此外鍵,那么為什么訪問模型中沒有該外鍵?
對於這種關系,您的表設置不正確,或者對於數據庫架構,關系配置不正確。
在一對一關系中, 另一個表包含外鍵,即, guests
和rooms
表將需要一個visit_id
列才能起作用(盡管我不認為這是您想要的,但您可能應該換一個別的關系)。
參見http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasone
foreignKey :在另一個模型中找到的外鍵的名稱。 如果您需要定義多個hasOne關系,則這特別方便。 該鍵的默認值是當前模型的帶下划線的單數名稱,后綴“ _id”。 在上面的示例中,它將默認為“ user_id”。
與您的Room
模型類似,在具有多對多關系的情況下,另一個模型也包含外鍵,即在配置中,外鍵應為room_id
而不是visit_id
(根據您的架構甚至不存在visit_id
)。
您的數據庫架構當前反映以下關系:
Visit belongsTo Guest, Room
Guest hasMany Visit
Room hasMany Visit
Guest belongsTo User
Room belongsTo User
User hasMany Guest, Room
我不了解您的應用程序的特定需求,因此我無法真正為您的架構提出進一步的建議(這將是一個新問題),但是通常我會說到目前為止您的架構還可以。 我絕對不建議更改它,以使Visit
與Room
和Guest
之間具有hasOne
關系,這絕對是我不鼓勵的,一次訪問是特定於來賓和房間的,但這不是唯一的,因此, visits
表包含外鍵是正確的,否則,這將是完全錯誤的,因為一個房間和一個客人只能與一次訪問相關聯。 因此請記住,將表保持原樣,並更改為上面列出的CakePHP模型的反映關系。
請注意,您不必在關系配置中顯式定義外鍵,在遵循數據庫架構的CakePHP約定時,會自動生成基於模型名稱的正確鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.