CdbCriteria没有给出Join结果

时间:2014-07-02 07:17:36

标签: php yii criteria

当我尝试使用CDbCriteria获取结果时,它不会给我预期的结果,就像我在phpmyadmin中运行由CDbCriteria生成的相同查询一样,然后我得到结果。我不明白发生了什么。

标准如下: -

$criteria = new CDbCriteria();
       $criteria->select = 't.*c.*' ;
       $criteria->join = 'LEFT OUTER JOIN `flight_cancel` as `c` on t.ticket_id = c.ticket_id';
       $criteria->compare('t.booking_id', $bookingId);
       $data = FlightTicket::model()->findAll($criteria);

而查询是

    SELECT t.*c.* FROM `flight_ticket` `t` LEFT OUTER JOIN `flight_cancel` as `c` on
 t.ticket_id = c.ticket_id WHERE t.booking_id= 'something'

使用CDbCriteria时它只返回flight_ticket数据而不是flight_cancel数据。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

$data = FlightTicket::model()->findAll($criteria);只会返回FlightTicket条记录。由于flight_cancelFlightCancel中有一个ActiveRecord类说flightCancel和一个关系FlightTicket,您可以更改您的条件以包含此内容:

$criteria = new CDbCriteria();
$criteria->together = true; // perform eager loading
$criteria->with = array('flightCancel' => array('joinType'=>'left outer join'));
$criteria->compare('t.booking_id', $bookingId);
$data = FlightTicket::model()->findAll($criteria);

然后,您可以通过FlightCancel(或$model->flightCancel获取一对多的关系)访问$model->flightCancel[]数据,其中$modelFlightTicket条记录

修改

来自yii database guide

  

AR依赖于明确定义的表的主键。如果表没有   有一个主键,它需要相应的AR类   通过覆盖指定哪个列应该是主键   primaryKey()方法如下,

public function primaryKey()
{
    return 'id';
    // For composite primary key, return an array like the following
    // return array('pk1', 'pk2');
}

因此,如果没有主键,最好使用CDbCommand::queryAll()将查询结果作为结果行数组返回。