belongsToMany 关联的 CakePHP 自定义查找器
CakePHP custom finder for belongsToMany association
我在为与 CakePHP 3.x.
的 belongsToMany 关联的连接 table 上的行为应用自定义查找器时遇到问题
我的主模型 Assessment
可以有很多 UnableToCompleteReasons
,我使用 muffin/trash
行为来支持连接 table AssessmentUtcReasons
的软删除。
$this->belongsToMany('UnableToCompleteReasons', [
'joinTable' => 'AssessmentUtcReasons',
'foreignKey' => 'AssessmentLogId',
'targetForeignKey' => 'UtcReasonId',
'through' => 'AssessmentUtcReasons',
'saveStrategy' => 'replace',
]);
从技术上讲,协会在这里工作得很好。已删除的 UnableToCompleteReasons
关联不会像您期望的那样 return 编辑到 Assessment
模型。
我的问题是我还必须 return 已删除的记录,包括所有连接数据,我无法使用 muffin/trash
中的 withTrashed
查找器] 我的 AssessmentUtcReasons
table 对象上的行为。
当我使用我的 full
查找器时,我想将 withTrashed
查找器应用到连接 table - 因为 UnableToCompleteReasons
table 没有不要使用软删除。
这就是我的主要目的:
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
选项,但一切似乎只适用于另一个 table 而不是连接 table.
我在文档中也找不到任何内容,所以如果我遗漏了什么,请原谅。谢谢!
我认为您会发现自己要么创建与联接 table 的具体关联,即 Assessment hasMany AssessmentUtcReasons
关联,以便您可以直接包含联接 table 关联,例如:
$query->contain([
'AssessmentUtcReasons' => function ($q) {
return $q
->find('withTrashed')
->find('ordered')
->contain('UnableToCompleteReasons');
},
]);
或者,如果适用,将 behaviors/finders 移动到 UnableToCompleteReasons
table class.
我在为与 CakePHP 3.x.
的 belongsToMany 关联的连接 table 上的行为应用自定义查找器时遇到问题我的主模型 Assessment
可以有很多 UnableToCompleteReasons
,我使用 muffin/trash
行为来支持连接 table AssessmentUtcReasons
的软删除。
$this->belongsToMany('UnableToCompleteReasons', [
'joinTable' => 'AssessmentUtcReasons',
'foreignKey' => 'AssessmentLogId',
'targetForeignKey' => 'UtcReasonId',
'through' => 'AssessmentUtcReasons',
'saveStrategy' => 'replace',
]);
从技术上讲,协会在这里工作得很好。已删除的 UnableToCompleteReasons
关联不会像您期望的那样 return 编辑到 Assessment
模型。
我的问题是我还必须 return 已删除的记录,包括所有连接数据,我无法使用 muffin/trash
中的 withTrashed
查找器] 我的 AssessmentUtcReasons
table 对象上的行为。
当我使用我的 full
查找器时,我想将 withTrashed
查找器应用到连接 table - 因为 UnableToCompleteReasons
table 没有不要使用软删除。
这就是我的主要目的:
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
选项,但一切似乎只适用于另一个 table 而不是连接 table.
我在文档中也找不到任何内容,所以如果我遗漏了什么,请原谅。谢谢!
我认为您会发现自己要么创建与联接 table 的具体关联,即 Assessment hasMany AssessmentUtcReasons
关联,以便您可以直接包含联接 table 关联,例如:
$query->contain([
'AssessmentUtcReasons' => function ($q) {
return $q
->find('withTrashed')
->find('ordered')
->contain('UnableToCompleteReasons');
},
]);
或者,如果适用,将 behaviors/finders 移动到 UnableToCompleteReasons
table class.