[英]Need some help with the conditions in CakePHP!
我以這種方式鏈接了三個模型: Item-> Order-> Payment
訂單有很多物品
訂單有一次付款
現在,我正在對商品進行分頁,並希望在其中添加條件以僅查找該訂單中已支付特定ID的商品。 我希望這是有道理的:P
我添加條件為:
array('Payment.id'=> $ id)
但這不起作用。 顯然是由於付款與物料無關。
那么,我該怎么辦呢?
我是Cakephp的新手,也許我完全錯了,但是據我了解,您可以在$ uses變量中使用控制器中的其他模型。 首先對付款模式進行查詢以獲取您的訂單ID,然后您可以使用此ID查找相應的商品。
$uses=array('Item','Order','Payment');
$order_id=$this->Payment->find('first',array('fields'=>'order_id','conditions'=>array('id'=>$payment_id)));
$items=$this->Item->find('all',array('conditions'=>array('order_id'=>$order_id)));
希望對您有所幫助。
您為什么不添加條件:
array('Order.payment_id'=>$id)
我認為這應該有效。
如果您指定要兩個遞歸級別,則應該可以使用。 我以為你有
在Payment.php中
//recursion level 1
var $belongsTo = array('Order');
在Order.php中
//recursion level 2
var $hasMany = array('Items')
沒錯,要使分頁功能正常工作,您必須查詢要分頁的模型並按照列表進行排序。
在PaymentController.php中
//Query two levels deep, so the $payment['Order']['Item'][0-n] will be present
var $paginate = array('recursive' => 2);
請注意,此方法的確會為每行生成另一個查詢以檢索項目。
確保將app / config / core.php中的調試級別設置為2以查看數據庫調用。
1)您可以使用Containable behavior ,在這種情況下,您需要將其放入Item模型中:
var $actsAs = array('Containable');
並將其放入您的Items控制器中:
$items = $this->Item->find('all'
, array (
'contain' => array('Order' => array('Payment'))
, 'conditions' => array('Payment.id' => $paymentId)
)
)
但是我懷疑這會在Payments表上進行左聯接(因為它具有hasMany關系)。 因此,您將不會以任何方式過濾項目。
2)如果您無法使包含工作,那么我經常在我的查找查詢中使用顯式聯接(請先閱讀有關連接的文章 )。 因此,在Items控制器中,您將擁有:
$items = $this->Item->find('all'
, array (
, 'joins' => array(
array(
'table' => 'payments'
, 'alias' => 'Payment'
, 'type' => 'INNER'
, 'conditions' => array(
'Option.id = Payment.option_id'
)
)
)
, 'conditions' => array('Payment.id' => $paymentId)
)
)
您可能還需要指定到選項表的聯接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.