Код: Выделить всё
Class User extends ActiveRecord {
tableName: user
public function getLocation(){
this->hasOne([Location=> ['id' => 'location_id']])
}
}
// таблица с иерархией, в таблице колонка location.parent_location_id связана с location.id
Class Location extends ActiveRecord {
tableName: location
public function getParent(){
this->hasOne([Location => ['id' => 'parent_location_id']])
}
}
// удалять "области" нельзя, нужно их скрывать, по умолчанию они скрыты через инит
Class LocationQuery extends ActiveQuery {
init(){
return this->andWhere['location.deleted' => null];
}
}
Class UserSearch extends User {
tableName: location
public $locationParentSearchName;
rules {[['locationParentSearchName', 'string']]}
search(){
if(!empty($this->locationParentSearchName)){
$quaery->joinWith('location.parent')->andWhere(['like', 'name', $this->locationParentSearchName]);
}
}
}
Код: Выделить всё
SELECT * FROM `user`
LEFT JOIN `location` ON `user`.`location_id` = `location`.`id`
LEFT JOIN `location` ON `location`.`parent_location_id` = `location`.`id`
WHERE
(`user`.`deleted` IS NULL)
AND
(`name` LIKE '%область%')
AND
((`location`.`deleted` IS NULL)
AND
((`location`.`deleted` IS NULL)
Два раза location появляется в запросе, потому что:
1) делаем первый вход в таблицу location и у нее стоит init в котором есть условие location.deleted => null
и затем щаг 2) делаем вход в таблицу location через parent_location_id и снова отрабатывает инит и выводит в запрос location.deleted => null
3) потенциально вижу проблему с location.name, потому что у меня их два... видимо если победить проблему с таблицей/псведонимом, то появится новая с не уникальностью name (таблица location)
посоветуйте, пожалуйста