CakePHP пользовательский искатель для ассоциации принадлежит компании - PullRequest
0 голосов
/ 06 июня 2019

У меня проблемы с применением пользовательского искателя из поведения в таблице соединений для ассоциации ownToMany с CakePHP 3.x.

Моя основная модель Assessment может иметь множество UnableToCompleteReasons, и я используюповедение muffin/trash для поддержки мягкого удаления в таблице соединений AssessmentUtcReasons.

    $this->belongsToMany('UnableToCompleteReasons', [
        'joinTable' => 'AssessmentUtcReasons',
        'foreignKey' => 'AssessmentLogId',
        'targetForeignKey' => 'UtcReasonId',
        'through' => 'AssessmentUtcReasons',
        'saveStrategy' => 'replace',
    ]);

Технически ассоциация здесь работает просто отлично.Удаленные UnableToCompleteReasons ассоциации не возвращаются в модель Assessment, как вы ожидаете.

Моя проблема в том, что мне нужно также возвращать удаленные записи, включая все данные о соединении, и я могу 't выяснить, используя 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 в ассоциации, но, похоже, все относится только к другой таблице, а несоединительный стол

Я не могу найти ничего в документации по этому вопросу, поэтому, пожалуйста, извините, если я что-то пропустил.Спасибо!

1 Ответ

1 голос
/ 07 июня 2019

Я думаю, вы обнаружите, что либо создаете конкретные ассоциации с вашей таблицей соединений, то есть Assessment hasMany AssessmentUtcReasons, так что вы можете напрямую содержать ассоциации таблиц соединений, например:

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

или, если применимо, перемещение поведений / искателей в класс таблицы UnableToCompleteReasons.

...