代码之家  ›  专栏  ›  技术社区  ›  Atul Dravid

在CakePHP中需要一些帮助!

  •  0
  • Atul Dravid  · 技术社区  · 16 年前

    我有三个模型以这种方式连接: 项目->订单->付款

    订单有很多项目
    订单一次付款

    我添加了以下条件:

    但它不起作用。显然,原因付款与项目无关。

    4 回复  |  直到 16 年前
        1
  •  1
  •   sipiatti    16 年前

    我是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)));
    

    希望对你有帮助。

        2
  •  0
  •   Nik Chankov    16 年前

    为什么不添加一个条件:

    array('Order.payment_id'=>$id)
    

    我想这应该管用。

        3
  •  0
  •   Lincoln B    16 年前

    如果您指定需要两个级别的递归,那么应该可以。我想你有

    在Payment.php

    //recursion level 1
    var $belongsTo = array('Order');
    

    //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);
    

    注意:这个方法会为每一行生成另一个查询来检索项目。

        4
  •  0
  •   icc97    16 年前

    1) 你可以用 Containable behaviour

    var $actsAs = array('Containable');
    

    并将其放入项目控制器:

    $items = $this->Item->find('all'
       , array (
          'contain' => array('Order' => array('Payment'))
          , 'conditions' => array('Payment.id' => $paymentId)
       )
    )
    

    2) 如果你不能让contains工作,那么我经常使用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)
       )
    )