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
    )
}

問題

registerednNumCGridView での値を取得でき'value' => 'var_dump($data)'ず、対応する DBTrip 行のプロパティを表示するだけで、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 に答える