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.