У меня есть 3 таблицы: clients
, clients_traders_relation
, traders
Это отношение многие-многие, у клиентов может быть много трейдеров, а у трейдеров может быть много клиентов.
У меня есть 2 отношения в модели clients
:
'traderssearch' => array(self::MANY_MANY, 'traders', 'clients_traders_relation(relation_id, trader_id)'),
'traders' => array(self::MANY_MANY, 'traders', 'clients_traders_relation(relation_id, trader_id)'),
Отношение traderssearch
используется для ограничения доступа к клиентам, которые не принадлежат текущему трейдеру (поэтому трейдеры видят только их клиенты, или если они являются одним из трейдеров).Отношение traders
используется для получения всех трейдеров (это решение я получил из моего другого вопроса, потому что одно отношение вернет только текущего трейдера, даже если их больше.
Используется в defaultScopeкак это:
return array(
'alias' => $class,
'with' => array(
'traderssearch' => array(
'together' => true,
'condition' => 'traderssearch.id='. Yii::app()->user->getId()),
'traders',
),
Однако мне бы хотелось иметь возможность искать клиентов какого-то другого трейдера. Допустим, у меня есть 3 клиента:
- Клиент A, трейдеры: я, XYZ
- Клиент B, трейдеры: я
- Клиент C, трейдеры: XYZ
Я хочу найти клиента XYZ.вернуть только Client A, потому что это единственный клиент, связанный как со мной, так и с XYZ.
Я сделал это в search ():
$criteria->with = 'traderssearch';
$criteria->together = true;
$criteria->compare('traderssearch.id', $this->search_trader);
search_trader
- добавлена дополнительная переменнаяк модели, так что он может быть использован для поиска. Если я отображаю список клиентов без использования поиска, он работает нормально. Но если я пытаюсь найти клиента XYZ, он ничего не возвращает мне. Я думаю, это потому, что оба из нихусловия сами себя исключают, иногданг, как id = 10 AND id = 20
, который никогда не будет правдой.Я попытался добавить OR
к compare()
, но это не сработало.
Если я удаляю условие из defaultScope, поиск работает, потому что теперь есть только одно условие для поиска идентификатора трейдера.Есть ли способ сохранить как defaultScope, так и условия поиска?Мне нужно другое, третье отношение?