Как правильно организовать поиск билетов туда/обратно?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Как правильно организовать поиск билетов туда/обратно?

Сообщение slo_nik »

Добрый день.
На сайте есть поиск билетов.
Поиск осуществляется по следующим полям:
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. Вообще-то не могу в голове сложить, по каким параметрам поиск обратного сделать.
Если билет "туда", то есть две даты, вылет/прилёт. Но если искать билет "обратно", то с датами непонятно как сделать. Обратно билет не стоит же искать в дату прилёта, нужен какой-то интервал...
Короче, запутался вконец...
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение Loveorigami »

Я бы пробовал так.
1. Запрос "туда" - решен
2. Как собираетесь решить запрос "обратно"? Решаете его без "туда".
3. Делаете UNION этих запросов. Учитываете те, у которых второй запрос вернул результат.
geee
Сообщения: 18
Зарегистрирован: 2017.02.19, 18:20

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение geee »

Вообще странно, что вы сделали поиск билетов по "дате прилета". Как по мне без этого было бы куда легче и изящнее сделать запрос к БД.
Ни разу не видел поиск билетов по такому параметру.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение slo_nik »

geee писал(а): 2017.04.09, 23:19 Вообще странно, что вы сделали поиск билетов по "дате прилета". Как по мне без этого было бы куда легче и изящнее сделать запрос к БД.
Ни разу не видел поиск билетов по такому параметру.
Почему Вы считаете, что это странно, искать по дате прилёта?
Как, в таком случае, сделать правильно?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение Alexum »

slo_nik писал(а): 2017.04.10, 10:49
geee писал(а): 2017.04.09, 23:19 Вообще странно, что вы сделали поиск билетов по "дате прилета". Как по мне без этого было бы куда легче и изящнее сделать запрос к БД.
Ни разу не видел поиск билетов по такому параметру.
Почему Вы считаете, что это странно, искать по дате прилёта?
Как, в таком случае, сделать правильно?
Наверное он имел ввиду, что обычно ищут по дате вылета как туда, так и обратно. А как сделать вам уже написали: находите билет "туда" - после чего ищите для него подходящий билет "обратно". Только лучше отображать эти билеты (или рейсы) в отдельных табличках. Посмотрите насколько удобно это реализовано, например, у Аэрофлота.
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение rugabarbo »

Alexum писал(а): 2017.04.10, 11:07Наверное он имел ввиду, что обычно ищут по дате вылета как туда, так и обратно.
Да, согласен. Недавно как раз брал билеты на самолёт - искал по дате ВЫлета в оба направления. Дата прилёта интересовала исключительно для информации, уже после покупки билетов.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение slo_nik »

Alexum писал(а): 2017.04.10, 11:07 Наверное он имел ввиду, что обычно ищут по дате вылета как туда, так и обратно. А как сделать вам уже написали: находите билет "туда" - после чего ищите для него подходящий билет "обратно". Только лучше отображать эти билеты (или рейсы) в отдельных табличках. Посмотрите насколько удобно это реализовано, например, у Аэрофлота.
А если сделать поиск по дате вылета, а обратный билет - пользователь указывает дату, когда он хочет вернуться.
И тогда, если есть пара "туда/обратно" выводить результат.
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение rugabarbo »

Откуда такой юзеркейс? Зайдите на Яндекс-Авиа и другие схожие сервисы поиска билетов. Везде указывают дату обратного вылета в поиске, а не дату приземления самолёта в точке назначения.
slo_nik
Сообщения: 344
Зарегистрирован: 2013.10.07, 19:08

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение slo_nik »

rugabarbo писал(а): 2017.04.10, 13:14 Откуда такой юзеркейс? Зайдите на Яндекс-Авиа и другие схожие сервисы поиска билетов. Везде указывают дату обратного вылета в поиске, а не дату приземления самолёта в точке назначения.
Так я это и имел ввиду, второй датой указывать дату обратного вылета.
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как правильно организовать поиск билетов туда/обратно?

Сообщение rugabarbo »

Значит, я не так понял. По датам вылета искать - ОК.
Ответить