我以这种方式连接的三种模式:用品 - >命令中─>付款
在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