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