簡體   English   中英

在CakePHP中需要一些幫助!

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM