Добрый вечер.
Поиск билетов туда/обратно.
Требуется вывести результаты поиска через ListView.
Но нужно сгруппировать результат попарно.
То есть, на дату вылета есть три рейса, на дату возвращения два. Вывести надо так, чтобы в пару к каждому рейсу вылета подставился рейс возвращения.
Сейчас сделал через цикл foreach(), формирую два массива, по дате вылета и дате возвращения. Потом эти два массива объединяю в третий массив.
$dataOne = $dataProvider->getModels();
foreach($dataOne as $key => $value){
if($value->date_start == strtotime($data['FlightsSearch']['date_from'] . ' 00:00')){
$arr_from[] = $value->attributes;
}
if($value->date_end == strtotime($data['FlightsSearch']['date_to'] . ' 00:00')){
$arr_to[] = $value->attributes;
}
}
foreach($arr_from as $key_f => $from){
foreach($arr_to as $key_t => $to){
$arr_all[] = [$from, $to];
}
}
Получается следующее.
Array
(
[0] => Array
(
[0] => Array
(
[id] => 154
[city_start_id] => 8
)
[1] => Array
(
[id] => 98
[city_start_id] => 1
)
)
[1] => Array
(
[0] => Array
(
[id] => 163
[city_start_id] => 8
)
[1] => Array
(
[id] => 98
[city_start_id] => 1
)
)
[2] => Array
(
[0] => Array
(
[id] => 182
[city_start_id] => 8
)
[1] => Array
(
[id] => 98
[city_start_id] => 1
)
)
)
Массивы содержащие id 154, 163, 182 это рейсы "туда", массив с id 98 это рейс "обратно".
Но в этом варианте у меня не подтягиваются связи с другими моделями, например, мне нужно, что бы city_start_id был не id города, а название.
Можно, конечно, в том же цикле сделать подмену
foreach($dataOne as $key => $value){
$value->city_start_id = $value->cityStart->city;
/*****/
}
Но насколько это правильно?
Как в этом случае использовать связи?
Или я вообще не то делаю?
Как правильно сделать?