Привет всем.
Вообщем такая ситуация, статистика должна состоять из 3х таблиц(castle, siege-clan, clan-data). Я создал реляция между моделями таблицы castle и siege-clan, генерирующую запрос
Свернуть ↑
PHP код:
SELECT `t`.`id` AS `t0_c0`, `t`.`name` AS `t0_c1`,
`t`.`taxPercent` AS `t0_c2`, `t`.`treasury` AS `t0_c3`, `t`.`siegeDate` AS
`t0_c4`, `t`.`siegeDayOfWeek` AS `t0_c5`, `t`.`siegeHourOfDay` AS `t0_c6`,
`siege`.`castle_id` AS `t1_c0`, `siege`.`clan_id` AS `t1_c1`,
`siege`.`type` AS `t1_c2`, `siege`.`castle_owner` AS `t1_c3`,
`master`.`clan_id` AS `t2_c0`, `master`.`clan_name` AS `t2_c1`,
`master`.`clan_level` AS `t2_c2`, `master`.`reputation_score` AS `t2_c3`,
`master`.`hasCastle` AS `t2_c4`, `master`.`ally_id` AS `t2_c5`,
`master`.`ally_name` AS `t2_c6`, `master`.`leader_id` AS `t2_c7`,
`master`.`crest_id` AS `t2_c8`, `master`.`crest_large_id` AS `t2_c9`,
`master`.`ally_crest_id` AS `t2_c10`, `master`.`auction_bid_at` AS
`t2_c11`, `master`.`ally_penalty_expiry_time` AS `t2_c12`,
`master`.`ally_penalty_type` AS `t2_c13`,
`master`.`char_penalty_expiry_time` AS `t2_c14`,
`master`.`dissolving_expiry_time` AS `t2_c15` FROM `castle` `t` LEFT OUTER
JOIN `siege_clans` `siege` ON (t.id=siege.castle_id) LEFT OUTER JOIN
`clan_data` `master` ON (t.id=master.hasCastle)
Свернуть ↑Развернуть ↓
На удивление все заработало, данные с таблицы объединенный, но теперь появилась новая задача, нужно вытащить с таблицы clan-data наименование кланов по параметрам из таблицы siege-clan, которую в свою очередь соединяет модель таблицы castle. Я без понятия как это все впилить в один реляционный запрос, поэтому нужен совет как лучше сделать...Если пилить в цикле:
Контроллер:
PHP код:
$castle = Castle::model()->cache(Yii::app()->params['castleCache'])->with('siege', 'master')->findAll();
Представление:
PHP код:
<? foreach($castle as $row): ?>
PHP код:
<? $owner = Clan::model()->find('hasCastle=?', array($row->siege->castle_owner); ?>
<? $atak = Clan::model()->find('hasCastle=?', array($row->siege->clan_id); ?>
Захватчик: <? echo $atak->clan_name ?>
Защитник: <? echo $owner->clan_name ?>
PHP код:
<? endforeach; ?>
То этом цикле получается 18 запросов в базу...не ахти, да и в представление желательно не писать запросы, может кто подскажет как лучше воплотить?