我想通过传递一个条件(limit)来限制加入的结果。->contain('ProductCategory')
$products = $ProductTable
->find('all')
->where($where)
->contain(
[
'ProductPrice' => [
'ProductPricetier'
],
'ProductCategory' => [
'sort' => ['ProductCategory.id DESC']
]
],
function (Query $q) {
return $q->limit(1);
}
);
抛出一个异常。
不能设置包含项。要使用$queryBuilder,$associations必须是一个字符串。
如何限制单个关联的结果?
我不确定你的例子的格式是否和你最初发布的一样,但是按照我编辑的正确格式,你应该看到你没有把闭包作为一个包含的选项来传递,而是作为第二个参数传递给了 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
关联,它将应用于整个二级关联数据查询,限制整个检索到的关联记录,即它将总共只返回1条关联记录,而不是每个行组1条。
例如,检查 如何限制每个记录组包含的关联? 关于如何限制每个行组的关联的信息。
另请参阅