#laravel-5.7
#laravel-5.7
Вопрос:
Я хотел бы получить подробную информацию о бронировании, детали — это услуга, забронированная за стоимость каждой услуги, взимаемый налог и общая сумма, а также статус
Стоимость, налог и общая сумма взяты из модели начисления, статус — из модели статуса, название службы — из модели обслуживания, а идентификатор и адрес бронирования — из модели бронирования.
Используя приведенный ниже код в моем контроллере, я могу получить название службы, идентификатор бронирования и статус, но я получаю только одну стоимость, налог и сумму для всех бронирований, несмотря на то, что они уникальны в их соответствующих таблицах.
public function viewInvoices() {
$allProducts = Booking::get()->where('client', Auth::user()->name);
$products = json_decode(json_encode($allProducts));
foreach ($products as $key => $val) {
$service_name = Service::where(['id' => $val->service])->first();
$service_fee = Charge::where(['id' => $val->charge])->first();
$service_status = Status::where(['id' => $val->status])->first();
$products[$key]->service_name = $service_name->name;
$products[$key]->service_fee = $service_fee->total;
$products[$key]->service_status = $service_status->name;
$product_charge = Charge::where(['id' => $val->charge])->get();
}$charges = json_decode(json_encode($product_charge));
return view('client.payment.invoices')->with(compact('products', 'charges'));
}
Это то, что у меня есть в контроллере и в представлении, которое я использую для каждого цикла дважды, сначала для перебора $products, а затем для перебора $ charges.
Могу ли я делать что-то неправильно и как я могу это исправить?
Ответ №1:
Я бы предложил использовать объединения для получения данных из более чем одной таблицы, поэтому вы хотели бы сделать это следующим образом,
public function viewInvoices() {
$products = DB::table('bookings')
->join('services', 'bookings.service', '=', 'services.id')
->join('charges', 'bookings.charge', '=', 'charges.id')
->join('statuses', 'bookings.status', '=', 'statuses.id')
->select('bookings.*', 'services.s_name', 'services.description', 'statuses.name', 'charges.amount', 'charges.tax', 'charges.total')
->get()
->where('client', Auth::user()->name);
return view('client.payment.invoices')->with(compact('products'));
}
Я только что предположил, что ваши имена столбцов в каждой таблице основаны на вашем объяснении, поэтому, если они отличаются, просто измените соответствующим образом.
Комментарии:
1. Вы можете узнать больше о соединениях laravel здесь laravel.com/docs/5.8/queries#joins