0

这些是我拥有的数据库表:

旅行

  • ID
  • 容量
  • ...

旅行登记

  • ID
  • 行程ID
  • 电话
  • ...
  • 注册状态

sql查询

我想要一个 sql 查询,它可以为我提供有足够空闲容量的行程。有效注册的 tripRegisteration.registerationState 是approved. 这是 sql 查询:

SELECT t.*,count(*) as registeredNum 
FROM trip t 
left join 
    (select * 
            from trip_registeration tr
            where tr.registerationState="approved"
            ) trlist
    on t.id =trlist.tripId 
group by t.id
having t.capacity>registeredNum

Yii 代码

DBTrip这是在activerecord 模型中获取数据提供者的 Yii PHP 代码

public function getAvailableTripsDataProvider()
{
    $criteria = new CDbCriteria();
    $criteria->select = 't.*, COUNT( * ) AS registeredNum';
    $criteria->join =
    'left join (select *
    from trip_registeration tr
    where tr.applicationState="initialized"
    ) trlist
    on t.id =trlist.tripId';
    $criteria->group = 't.id';
    $criteria->having = 't.capacity > registeredNum';

    return new CActiveDataProvider ( 'DBTrip', array (
            'criteria' => $criteria
    )
}

问题

一切都很好,除了我无法registerednNum在 CGridView 中获取值,'value' => 'var_dump($data)'只显示相应 DBTrip Row 的属性,并且它没有任何关于registeredNum. 我如何在 CGridView 中显示它?

4

1 回答 1

0

您需要将registeredNum公共属性添加到DBTrip模型中:

class DBTrip extends CActiveRecord{
    public $registeredNum;

除此之外,我想知道您为什么要进行不必要的子选择。您可以将该条件添加到您的ON子句中,从而使您的查询更具可读性。

$criteria->join ='left join trip_registration tr ON 
    t.id=trlist.tripId AND tr.applicationState="initialized"';
于 2013-09-14T08:30:52.687 回答