gpt4 book ai didi

sql - Yii2 activerecord 意外结果在 with() 回调函数中有限制

转载 作者:行者123 更新时间:2023-12-01 15:16:23 28 4
gpt4 key购买 nike

我在使用 Yii2 构建查询时遇到问题。

假设我们有四个相关模型:Customer、Order、Orderitem 和 Orderitempicture。

Order与Customer相关,Orderitem与Order相关,Orderitempicture与Orderitem相关。

代码如下:

Customers::find()
->where(['id' => $id])
->with(['orders' => function($q) {
$q->select(['id', 'name', 'customer_id', '(select COUNT(*) from orders where customer_id=order.id) AS thecount'])->having('thecount > 0');
}])
->with(['orders.orderitems' => function($q) {
$q->select(['id', 'name', 'price', 'order_id']);
}])
->with(['orders.orderitems.orderitemspictures' => function($q) {
$q->select(['id', 'src_thumb', 'orderitem_id'])->orderBy("id desc")->limit(1);
}])
->select(['id'])
->asArray()
->one();

这是调试器执行的语句之一:

SELECT `id`, `src_thumb`, `orderitem_id` FROM `orderitempicture` WHERE `order_id` IN ('37', '42', '29', '36', '39', '41', '30', '40', '28', '38') ORDER BY `id` DESC LIMIT 1

现在我的问题出在这一行:$q->select(['id', 'src_thumb', 'orderitem_id'])->orderBy("id desc")->limit(1);

我试图为每个 orderitem 获取一个 orderitempicture,然而,获取 orderitempictures 的 SQL 被合并到一个语句中,并且限制应用于该语句,所以结果是我只得到一个订单的一张订单图片,其余的我一无所获。

如何设置每位 parent 只能生育一个 child 的限额?有没有办法告诉 Yii 为父级中的每条记录创建多个查询并对其设置限制而不是创建一个查询?

最佳答案

我想澄清一下 one() - click here 是如何实现的可以应用方法。 one() 应该应用于 ActiveQuery 实例,其中查询返回一个 ActiveRecord,但取决于 asArray(),此方法可以返回一个数组。

我的建议是使用 all() - click here .由于您的查询返回多条记录,因此可以使用 all() 将其转换为 ActiveRecord 实例数组。

关于sql - Yii2 activerecord 意外结果在 with() 回调函数中有限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com