Я не уверен, что ваш пример был отформатирован так же, как вы его изначально опубликовали, но при правильном форматировании, как я его отредактировал, вы должны увидеть, что вы не передаете закрытие как вариант для сдерживания, но в качестве второго аргумента метода contain()
, который работает только тогда, когда первый аргумент является строкой (как указано в сообщении об ошибке), в частности, псевдонимом ассоциации.
Вам нужно будет сделать, например:
->contain([
'ProductPrice' => [
'ProductPricetier'
],
'ProductCategory' => function (Query $q) {
return $q
->order([
'ProductCategory.id' => 'DESC'
])
->limit(1);
},
]);
or
->contain('ProductCategory', function (Query $q) {
return $q
->order([
'ProductCategory.id' => 'DESC'
])
->limit(1);
});
При этом это, вероятно, не будет работать так, как вы думаете, поскольку ограничение в содержании не работает для каждой строки/группы, вместо этого оно будет игнорироваться для ассоциаций belongsTo
и hasOne
, а также для hasMany
. и belongsToMany
ассоциаций, он будет применяться ко всему запросу данных вторичной ассоциации, ограничивая общее количество извлекаемых связанных записей, т. е. он будет возвращать всего 1 связанную запись, а не 1 на строку/группу.
Проверьте, например, Как ограничить содержащиеся ассоциации для каждой записи/группы? для получения информации о том, как ограничить связи для каждой строки/группы.
Смотрите также
person
ndm
schedule
24.04.2020