我在使用Yii2構建查詢時遇到了問題。Yii2積極記錄帶有()回調函數的極限意外結果
比方說,我們有四個相關的模型:客戶,訂單,OrderItem的和Orderitempicture。
訂購關係到客戶,OrderItem的是訂購相關,並且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合併爲一個狀態並且該限制適用於該陳述,所以結果是我只能得到一個訂單項的一個訂單圖,而其餘的我什麼也得不到。
我怎樣才能設置一個限制,讓每個家長獲得一個孩子?有沒有辦法告訴Yii爲父代中的每個記錄創建多個查詢,並設置限制而不是創建一個查詢?
您正在使用'one()'。所以你總是從數據庫獲取一條記錄或具體。我真的不明白你在問什麼。 –
我想要做的是爲每個訂購項目獲得一個orderitempicture。發生的事情是,我爲所有訂購項目總共獲得了一個訂單圖片。 –