BelongTomany关联的CakePHP自定义查找程序

BelongTomany关联的CakePHP自定义查找程序,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,对于与CakePHP 3.x的belongTomany关联,我无法从联接表上的行为应用自定义查找程序 我的主要模型Assessment可能有许多无法完成的原因,我使用muffin/trash行为在联接表AssessmentUtcReasons上提供软删除支持 $this->belongsToMany('UnableToCompleteReasons', [ 'joinTable' => 'AssessmentUtcReasons', 'fore

对于与CakePHP 3.x的belongTomany关联,我无法从联接表上的行为应用自定义查找程序

我的主要模型
Assessment
可能有许多
无法完成的原因
,我使用
muffin/trash
行为在联接表
AssessmentUtcReasons
上提供软删除支持

    $this->belongsToMany('UnableToCompleteReasons', [
        'joinTable' => 'AssessmentUtcReasons',
        'foreignKey' => 'AssessmentLogId',
        'targetForeignKey' => 'UtcReasonId',
        'through' => 'AssessmentUtcReasons',
        'saveStrategy' => 'replace',
    ]);
从技术上讲,协会在这里运作良好。已删除的
无法完成原因
关联不会像您预期的那样返回到
评估
模型

我的问题是,我还必须返回已删除的记录,包括所有连接数据,我无法从我的
AssessmentUtcReasons
表对象上的
muffin/trash
行为中使用
withTrashed
查找器

当我使用我的
full
finder时,我想将
withTrashed
finder应用于联接表-因为
unabletocompleteReasions
表不使用软删除

以下是我的基本目标:

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
选项,但似乎所有方法都只适用于另一个表,而不适用于联接表


我在文档中也找不到这方面的任何内容,因此如果我遗漏了什么,请原谅。谢谢

我认为您会发现自己或者创建与联接表的具体关联,即
评估有许多assessmentutcreason
关联,因此您可以直接包含联接表关联,如:

$query->contain([
    'AssessmentUtcReasons' => function ($q) {
        return $q
            ->find('withTrashed')
            ->find('ordered')
            ->contain('UnableToCompleteReasons');
    },
]);

或者,如果适用,将行为/查找程序移动到
UnableToCompleteReasons
表类中。

这似乎是唯一优雅的方法。谢谢