left join таблицы с максимальным значением

Народ, помогите :) зашел в тупик!

Есть три сущности:

  • оборудование (Equipment)

  • договора (Contracts) с полями dtFrom и dtTo (срок аренды С и ПО)

  • связь оборудования с договорами (ContractEquipments)

есть две задачи:

  • получить текущий договор

  • получить ближайший в будущем договор

Первую задачу решил так (может кому пригодится):




'contractequipment'=>array(

  self::HAS_MANY, 'ContractEquipments', 'idEquipment'),

'contracts'=>array(

  self::HAS_MANY, 'Contracts', array('idContract'=>'idContract'),'through'=>'contractequipment', 'scopes'=>'active')



где active scopes из Contracts:




'active'=>array(

  'condition'=>"'".date('Y-m-d H:i:00')."' between contracts.dtFrom and contracts.dtTo and contracts.fArchived is false")



тут все работает и фунциклирует…

Но вот если сейчас оборудование не аренде, то как же получить ближайший договор???

Есть идеи, мысли, наводки :) буду рад всему…

Если я правильно понял задачу, то скоуп для будущего договра буде примеро такой:




'following'=>array(

	'condition'=>"contracts.dtFrom > NOW() and contracts.fArchived is false",

	'order'=>'contracts.dtFrom',

	'limit'=>1,

),



Респект!!! Выручил!

Спасибо огромное! А то мозг прям в тупик встал как это сделать… Теперь все работает.

Жаль еще что нельзя в связи has_one установить ‘together’=>false :) но это уже другая опера) просто теперь если заюзать with=>array(‘contracts’, ‘contractsnear’), ругается на двойное упоминание таблицы ContractEquipments, что логично, так как обе связи идут ‘through’=>‘contractequipment’

Удобно, когда has_many и ставишь ‘together’=>false, yii делает отдельный запрос :)

HAS_ONE это частный случай от HAS_MANY, и если тебе хочется заюзать ‘together’=>false - просто используй HAS_MANY. Разница будет только в доступе к связанному елементу как $model->related[0] вместо $model->related.