我被困在使用可包含行爲的CakePhp中查詢。 所以我有 - 型號訂購HABTM產品CakePhp包含無用條目的查詢
我想在特定狀態下訂購併且在特定餐館中至少有一種產品的訂單。
爲了您更好地理解,這裏是什麼樣子的模式
(int) 110 => array(
'Order' => array(
'id' => '10',
'customer_id' => '3',
'state_id' => '6',
'payment_id' => '3',
'created' => '2012-11-10 12:23:03',
'user_id' => '10',
'date_delivery' => '2012-10-12 20:30:00',
'km' => '2.76'
),
'Product' => array(
(int) 0 => array(
'id' => '51',
'category_id' => '2',
'restaurant_id' => '10001',
'title' => 'aaa',
'description' => 'aaa',
'price' => '8.2',
'tva_id' => '2',
'img' => 'aaa',
'maj_img' => '2012-10-24 15:38:56',
'ProductsOrder' => array(
'id' => '57',
'product_id' => '51',
'order_id' => '10',
'quantity' => '1',
'price' => '8.2',
'tva_id' => '2',
'meal' => null
)
)))
(ProductsOrder是連接表)
所以,我使用中可容納的行爲,這裏是我的查詢:
$q = $this->Order->find('all', array(
'conditions' => array(
'Order.date_delivery BETWEEN ? AND ?' => array($dateDebut->format('Y-m-d H:i:s'), $dateFin->format('Y-m-d H:i:s')),
'Order.state_id' => array(6, 8)),
'order' => 'Order.date_delivery',
'contain' => array(
'Product' => array(
'conditions' => array('Product.restaurant_id' => $id),
)
)
));
問題是查詢的結果返回了一些我不想要的條目。 下面是一個例子,它是結果查詢的一部分,並不是假設存在。 請注意,Product是一個空數組。
109 => array(
'Order' => array(
'id' => '179',
'customer_id' => '139',
'state_id' => '6',
'payment_id' => '3',
'created' => '2012-11-18 22:29:16',
'user_id' => '10',
'date_delivery' => '2012-10-12 20:00:00',
'coursier_id' => '19',
'comment' => '',
'km' => '10.7'
),
'Product' => array()
您可能會來救我,如果你有什麼解決的想法... 謝謝
編輯轉儲SQL
SELECT COUNT(*)AS count
FROM live_resto_manager
。 restaurants
AS Restaurant
WHERE Restaurant
。 id
= 10001
選擇Order
。 id
,Order
。 customer_id
,Order
。 state_id
,Order
。 payment_id
,Order
。 created
,Order
。 user_id
,Order
。 date_delivery
,Order
。 coursier_id
,Order
。 comment
,Order
。 km
從live_resto_manager
。 orders
AS Order
WHERE Order
。 date_delivery
BETWEEN'2012-10-01 00:00:00'AND'2012-10-31 23:59:00'AND Order
。 IN(6,8)Order
。 date_delivery
ASC
選擇Product
。 id
,Product
。 category_id
,Product
。 restaurant_id
,Product
。 title
,Product
。 description
,Product
。 price
,Product
。 tva_id
,Product
。 img
,Product
。 maj_img
,ProductsOrder
。 id
,ProductsOrder
。 product_id
,ProductsOrder
。 order_id
,ProductsOrder
。 quantity
,ProductsOrder
。 price
,ProductsOrder
。 tva_id
,ProductsOrder
。 meal
從live_resto_manager
。 products
AS Product
JOIN live_resto_manager
。 (。(99,100,102,105,101,103,104,1,58,3,106,108,2,31,107,109,110,111,59,112,114,115,117,118 ,61,113,33,116,60,119,120,121,122,4,62,34,123,63,124,125,5,6,126,129,127,128,130,131,133 ,132,134,135,138,137,139,140,141,64,136,142,143,35,36,37,144,145,146,147,149,148,150,151,152,153 ,7,154,155,65,156,158,159,161,8,157,162,160,163,9,165,166,66,164,168,38,167,169,39,170,171 ,172,173,67,174,175,68,69,176,177,178,179,10,40,180,181,182,192,183,184,186,187,70,185,189,190 ,12,188,191,193,13,14,41,194,11,195,15,71,196,197,200,201,72,198,199,202,16,73,203,42,204 ,205,74,206,207,208,209,43,210,212,44,211,45,17,76,213,214,215,75,77,216,78,217,218,219,79 ,220,221,222,223,80,224,46,225,81,18,229,233,226,227,228,230,231,232,234,47,236,235,237,238,239,239,221,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,213 ,19,242,243,244,48,49,50,240,241, 24,25,25,25,25,25,25,25,25,25,25,251,253,254,256,257,258,260,262,252,255,82,249,259,261,263, 267位,83位,84位,269位,85位,268位,270位,271位,86位,272位,21位,87位,274位,273位,275位,90位,276位,277位,88位,89位,278位,279位,280位,281位,282位, 284,285,287,288,283,91,22,286,289,290,294,298,24,291,292,295,296,297,25,52,92,93,本發明的實施方案包含如下實例:301,302,53,32,303,304,305,306,309,307,308,54,94,293,55,310,312,311,313,314,316,315,317,318,319,所述方法包括使用本文所述的方法,通過使用本發明的化合物或其鹽, 335,57,336,337,338)和ProductsOrder
。 product_id
= Product
。 id
)其中Product
。 restaurant_id
= 10001
Whoooo這是很醜陋的
空的Product數組是可容納行爲的預期結果。當Containable沒有來自相關數據庫表的結果時,它是標準的Contained返回一個包含模型的空數組。至於你的問題的其他部分,你可能想用find調用輸出的SQL和Product.restaurant_id的值和兩個日期來更新你的問題。爲什麼不應該將該訂單顯示在結果集中? – mensch
那麼,如果產品將是空的,那麼爲了不返回條目,我需要做些什麼?我可以在PHP代碼中檢查它,但這不是我正在尋找的。 – azerto00
恐怕這對於Containable來說是不可能的,你必須遍歷數組來過濾結果。本文提出了一個使用'afterFind()'的解決方案:http://nuts-and-bolts-of-cakephp.com/2008/08/06/filtering-results-returned-by-containable-behavior/ – mensch