Это таблица базы данных у меня есть:Как показывают SQL вычисляемого столбца в CGridView
поездка
- ID
- емкость
- ...
- идентификатор
- tripId
- Firstname
- Lastname
- телефон
- ...
- registerationState
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 Код
Это код Yii PHP для получения поставщика данных в DBTrip
ActiveRecord модели
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)'
просто покажет свойства соответствующих D BTrip Row, и у него нет никакой информации о registeredNum
. Как я могу показать его в CGridView?
о югу выбрать, потому что левое соединение не даст мне результаты там, где нет 'tr', потому что' on' критерий не 'true' ... спасибо, что работал :) – shampoo
left join *. * возвращает вам тот же результат. Вы попробовали? –
да, я поверила, что это не так :). У меня не хватило смелости сделать подзаголовок (как и вы), но я должен был это сделать. кажется, что если один из столбцов в состоянии 'on' не относится к' t', как 'tr.applicationState =" initialized ", оператор будет выражаться как' false'. – shampoo