我在使用 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);
我正在尝试为每个订单项获取一个订单项图片,但是,发生的情况是获取订单项图片的 SQL 被合并到一个语句中,并且限制应用于该语句,所以结果是我只得到一个订单项图片一个订单项,其余的我一无所获。
如何为每个父母设置一个孩子的限制?有没有办法告诉 Yii 为父项中的每条记录创建多个查询并设置限制而不是创建一个查询?