Добрый день.
На сайте есть поиск билетов.
Поиск осуществляется по следующим полям:
1) Город вылета
2) Город прилёта
3) Дата вылета
4) Дата прилёта
5) Checkbox для выбора направления, в одну сторону или билет туда/обратно.
Сейчас поисковая модель содержит такие условия:
$query->andWhere(['status' => Flights::STATUS_ACTIVE])
->andWhere(['>=', 'date_start', $this->date_from ? strtotime($this->date_from . ' 00:00:00') : null])
->andWhere(['=', 'city_start_id', $this->city_from])
->andWhere(['=', 'city_end_id', $this->city_to]);
$query->andFilterWhere(['<=', 'date_end', $this->date_to ? strtotime($this->date_to . ' 23:59:59') : null])
->andFilterWhere(['=', 'airline_id', $this->airline])
->andFilterWhere(['in', 'airport_start_id', $this->airport_id])
->andFilterWhere(['in', 'airline_id', $this->company_id])
->andFilterWhere(['=', 'agent', $this->partner]);
Выбор направления задаётся переменной
// если переменная равна 1, то билеты надо искать туда/обратно, если равна 2, то билеты искать в одну сторону.
public $direction = 1;
Если ищется билет в одну сторону, то особых проблем нет, вроде работает нормально.
А вот с поиском билетов туда/обратно сложность.
Как правильно указать условия поиска?
Или при внесении перелётов в базу данных делать связь между билетами туда/обратно?
P.S. Вообще-то не могу в голове сложить, по каким параметрам поиск обратного сделать.
Если билет "туда", то есть две даты, вылет/прилёт. Но если искать билет "обратно", то с датами непонятно как сделать. Обратно билет не стоит же искать в дату прилёта, нужен какой-то интервал...
Короче, запутался вконец...