我使自己成爲一個插件用於加載與beforeFind()
相關的內容,所以你可以說ContentPage/10
類似於ConentNews/10
和Gallery/5
。CakePHP 3.1,通用屬於許多
我的表related_contents樣子:
id int(11)
source_table_name varchar(255)
target_table_name varchar(255)
source_table_id int(11)
target_table_id int(11)
我的行爲的代碼:
public function beforeFind(Event $event, Query $query, ArrayObject $options, $primary) {
$attachedTables = self::getAttachedTables(); //Array of ORM models which has this behavior
foreach ($attachedTables as $attachedTable) {
$options = [
'through' => 'RelatedContents',
'bindingKey' => 'RelatedContents.source_table_id',
'foreignKey' => 'RelatedContents.target_table_id',
'conditions' => [
'RelatedContents.source_table_name' => $this->_table->table(),
'target_table_name' => $attachedTable->table(),
]
];
$this->_table->belongsToMany($attachedTable->alias(), $options);
}
}
現在,當我在我的模型試圖find()
,零個相關的實體,沒有發現錯誤。我究竟做錯了什麼?
我不認爲'beforeFilter'是放置代碼的正確位置。試試'initialize'而不是 – arilia
我試過了,它會因getAttachedTables()方法觸發遞歸。但我不認爲它應該有所作爲,我試圖把hasMany放在查找之前,它的工作原理。 – Aiphee