我以這種方式連接的三種模式:用品 - >命令中─>付款
在CakePHP中需要一些幫助!
訂購的hasMany項目
訂購hasOne付款
現在,我分頁項目,並希望在其中添加條件以僅查找具有特定ID的支付的訂單的項目。我希望是有道理的:P
我加入的條件爲:
陣列( 'Payment.id'=> $ id)的
,但它不工作。顯然導致付款與項目無關。
那麼,我該怎麼辦呢?
我以這種方式連接的三種模式:用品 - >命令中─>付款
在CakePHP中需要一些幫助!
訂購的hasMany項目
訂購hasOne付款
現在,我分頁項目,並希望在其中添加條件以僅查找具有特定ID的支付的訂單的項目。我希望是有道理的:P
我加入的條件爲:
陣列( '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)));
我希望它有幫助。
它會幫助,只是一件事︰$ order_id ['Payment'] ['order_id']否則它會返回多維數組和$項目將是空的 – 2010-08-15 19:44:45
這是好的,但怎麼能做到這一點與分頁? – 2010-08-15 19:53:27
您可以使用$ limit和$ page作爲查找參數,也可以對其進行排序。你需要建立你自己的方式來解決分頁問題,因爲內置分頁程序有自己的障礙... 檢查了這一點:http://book.cakephp.org/view/73/Retrieving-Your-Data# find-449 – sipiatti 2010-08-16 20:11:50
你爲什麼不添加一個條件:
array('Order.payment_id'=>$id)
我認爲這應該工作。
嗯,訂單沒有payment_id ...付款有order_id在這種情況下作爲付款belongsTo訂單和訂單hasOne付款 – 2010-08-14 16:36:07
如果你指定你想要兩個遞歸級別,這應該工作。林假設你有
在Payment.php
//recursion level 1
var $belongsTo = array('Order');
在Order.php
//recursion level 2
var $hasMany = array('Items')
你是正確的,對於PAGINATE工作必須查詢您希望將網頁模型和排序列出。
在PaymentController.php
//Query two levels deep, so the $payment['Order']['Item'][0-n] will be present
var $paginate = array('recursive' => 2);
注意這種方法確實產生另一個查詢的每一行取回物品。
我已經嘗試了所有級別的遞歸值,但奇怪的是它沒有工作......你所假設的和你的解決方案是正確的,但我不知道什麼是錯的。 – 2010-08-19 19:21:12
確保app/config/core.php中的調試級別設置爲2以查看數據庫調用。
1)您可以使用Containable behaviour,在這種情況下,你需要把這個在您的產品型號:
var $actsAs = array('Containable');
,這爲您的項目控制器:
$items = $this->Item->find('all'
, array (
'contain' => array('Order' => array('Payment'))
, 'conditions' => array('Payment.id' => $paymentId)
)
)
但是我懷疑那將做一個左連接到付款表(作爲一個hasMany關係)。所以你不會以任何方式過濾項目。 2)如果你不能包含工作,那麼我經常在我的查詢中使用explict連接(閱讀這個bakery article by nate on joins)。因此,在您的物品控制器中,您將擁有:
$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)
)
)
您可能還需要指定選項表上的連接。
這更像是它......會嘗試一下,讓你知道!非常感謝。 – 2010-08-20 13:15:08
array('Item.Oder.Payment.id'=> $ id)解決了什麼問題? – 2010-08-14 09:58:33
已經嘗試過......不起作用! – 2010-08-14 10:10:58