3

我在使用 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 为父项中的每条记录创建多个查询并设置限制而不是创建一个查询?

4

1 回答 1

0

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

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

于 2015-10-01T02:43:41.173 回答