我被困在使用可包含行为的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