Добрый день,
Сделал фильтр по связанной модели, руководствуясь данными статьями:
webdishes.ru/filter
https://nix-tips.ru/yii2-sortirovka-i-filtr-gridvi...
Дело в том, что у меня основная модель -
Orders ссылается на модель
Places 2-мя внешними ключами -
place_from_id,
place_to_id.
В примере следующиего кода отрабатывает фильтрация для
placeFrom:
class OrdersSearch extends Orders
{
public $placeFromName;
public $placeToName;
...
public function rules()
{
return [
...
[['placeFromName','placeToName'], 'safe']
....
];
}
....
public function search($params)
{
$query = Orders::find();
$query->joinWith(['placeFrom']); // , 'placeTo
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$dataProvider->sort->attributes['placeFrom'] = [
'asc' => ['t_places.name' => SORT_ASC],
'desc' => ['t_places.name' => SORT_DESC],
];
$dataProvider->sort->attributes['placeTo'] = [
'asc' => ['t_places.name' => SORT_ASC],
'desc' => ['t_places.name' => SORT_DESC],
];
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere([
'place_from_id' => $this->place_from_id,
'place_to_id' => $this->place_to_id,
....
]);
$query
->andFilterWhere(['like', 'LOWER(t_places.name)', strtolower($this->placeFromName)])
->andFilterWhere(['like', 'LOWER(t_places.name)', strtolower($this->placeToName)])
;
return $dataProvider;
}
...
}
Но мне то по 2-м полям надо искать, если я заменяю:
$query->joinWith(['placeFrom']); // , 'placeTo
на:
$query->joinWith(['placeFrom' , 'placeTo]);
Ловлю:
Database Exception – yii\db\Exception
SQLSTATE[42712]: Duplicate alias: 7 ERROR: table name "t_places" specified more than once
The SQL being executed was: SELECT COUNT(*) FROM "m_orders" LEFT JOIN "t_places" ON "m_orders"."place_from_id" = "t_places"."id" LEFT JOIN "t_places" ON "m_orders"."place_to_id" = "t_places"."id" WHERE (m_orders.exist != 2) AND ((("status_id" = 5) OR ("status_id" = 4)) OR ("driver_id"=9))
Error Info: Array
(
[0] => 42712
[1] => 7
[2] => ERROR: table name "t_places" specified more than once
)
↵
Caused by: PDOException
SQLSTATE[42712]: Duplicate alias: 7 ERROR: table name "t_places" specified more than once
Я понимаю, что видимо неправильно джоинить 2 раза одну и туже таблицу.
Подскажите, как правильно поступить, чтобы фильтр проходил корректно по 2-м полям, ссылающимся на одну и ту же таблицу?