Я работаю над списком лодок, где есть лодки двух типов
При наличии общих лодок
я должен проверить
- , если они обеспечивают поездку на полдня (1/2), тогда будет показана цена на полдня.
- если полдня недоступен, проверьте, равны ли три четверти (3/4) дня, а цена - три четверти дня.
- В противном случае проверьте полный день и возьмите цену полного дня.
Если общая лодка недоступна
- Проверить наличие частной лодки.
- Затем примените тот же сценарий, приведенный выше для частных лодок.
Для этих цен я использовал условия, но при фильтрации цен от высокой к низкой / низкой к высокой я не могу понять, как применять условия. Может кто-нибудь помочь мне решить это.
Модели:
Модельные отношения:
public function getBoatfishingcharter() {
return $this->hasOne(Boatfishingcharter::className(), ['boat_id' => 'boat_id']);
}
public function getBoatsharedtrip() {
return $this->hasOne(Boatsharedfishingtrip::className(), ['boat_id' => 'boat_id']);
}
if($model->boatsharedtrip->shared_fishing_charters == '1') {
if($model->boatsharedtrip->one_two_day_4hrs == 1) {
$shared_price = $model->boatsharedtrip->one_two_day_rate_per_angler;
} else if($model->boatsharedtrip->three_four_day_6hrs == 1) {
$shared_price = $model->boatsharedtrip->three_four_day_rate_per_angler;
} else if($model->boatsharedtrip->full_day_8hrs == 1) {
$shared_price = $model->boatsharedtrip->full_day_rate_per_angler;
}
} else if($model->boatfishingcharter->private_fishing_charters == 1) {
if($model->boatfishingcharter->one_two_day_4hrs == 1) {
$private_price = $model->boatfishingcharter->one_two_day_rate;
} else if($model->boatfishingcharter->three_four_day_6hrs == 1) {
$private_price = $model->boatfishingcharter->three_four_day_rate;
} else if($model->boatfishingcharter->full_day_8hrs == 1) {
$private_price = $model->boatfishingcharter->full_day_rate;
}
}
Для фильтра я сейчас использую:
if($_GET['orderby'] == 'price_desc') {
$query->orderBy(['one_two_day_rate_per_angler' => SORT_DESC, 'one_two_day_rate' => SORT_DESC, 'three_four_day_rate_per_angler' => SORT_DESC, 'three_four_day_rate' => SORT_DESC, 'full_day_rate_per_angler' => SORT_DESC, 'full_day_rate' => SORT_DESC]);
} elseif($_GET['orderby'] == 'price_asc') {
$query->orderBy(['one_two_day_rate_per_angler' => SORT_ASC, 'one_two_day_rate' => SORT_ASC, 'three_four_day_rate_per_angler' => SORT_ASC, 'three_four_day_rate' => SORT_ASC, 'full_day_rate_per_angler' => SORT_ASC, 'full_day_rate' => SORT_ASC]);
}
$query = Boatinformation::find();
$query->leftJoin('boatsharedfishingtrip', '`boatsharedfishingtrip`.`boat_id` = `boatinformation`.`boat_id`')
->leftJoin('rating_review', '`rating_review`.`boat_id` = `boatinformation`.`boat_id`')
->leftJoin('boatotherservice', '`boatotherservice`.`boat_id` = `boatinformation`.`boat_id`')
->leftJoin('boatfishingequipment', '`boatfishingequipment`.`boat_id` = `boatinformation`.`boat_id`')
->join('INNER JOIN','boatcompanyinformation', '`boatcompanyinformation`.`id` = `boatinformation`.`boat_id`')
->leftJoin('boatfishingcharter', '`boatfishingcharter`.`boat_id` = `boatinformation`.`boat_id`')
->where(['boat_publish' => 1])->all();
Редактировать
Вот как я отображаю лодки в списке