我无法通过连接表上的行为将自定义查找器应用于与CakePHP 3.x的belongsToMany关联。
我的主模型Assessment
可以有多个UnableToCompleteReasons
,并且我使用muffin/trash
行为对联接表AssessmentUtcReasons
进行软删除支持。
$this->belongsToMany('UnableToCompleteReasons', [
'joinTable' => 'AssessmentUtcReasons',
'foreignKey' => 'AssessmentLogId',
'targetForeignKey' => 'UtcReasonId',
'through' => 'AssessmentUtcReasons',
'saveStrategy' => 'replace',
]);
从技术上讲,该协会在这里可以正常工作。删除的UnableToCompleteReasons
关联不会返回您期望的Assessment
模型。
我的问题是我还必须返回删除的记录,包括所有联接数据,而且我无法从我的withTrashed
行为中使用muffin/trash
查找程序AssessmentUtcReasons
表对象。
使用full
查找程序时,我想将withTrashed
查找程序应用于联接表-因为UnableToCompleteReasons
表不使用软删除。
这基本上就是我要去的地方
public function findFull(Query $query, $options)
{
return $query->contain([
'UnableToCompleteReasons' => function ($q) {
// These finders should be on the JOIN table
return $q->find('withTrashed')->find('ordered');
},
]);
}
}
我已经尝试了所有可以想到的方法,例如在关联上使用finder
选项,但是所有方法似乎仅适用于另一个表,而不适用于联接表。
我也无法在文档中找到任何内容,因此,如果我错过了什么,请原谅。谢谢!
答案 0 :(得分:1)
我想您会发现自己要么与联接表创建了具体的关联,即Assessment hasMany AssessmentUtcReasons
关联,以便可以直接包含联接表的关联,例如:
$query->contain([
'AssessmentUtcReasons' => function ($q) {
return $q
->find('withTrashed')
->find('ordered')
->contain('UnableToCompleteReasons');
},
]);
,或者在适用的情况下,将行为/发现者移至UnableToCompleteReasons
表类中。