从 Laravel 中的多个表中获取数据
Getting data from multiple tables in Laravel
我想获取有关预订的详细信息,详细信息是预订的服务、每项服务的费用、收取的税款和总金额,以及状态
成本、税金和总金额来自收费模型,状态来自状态模型,服务名称来自服务模型,预订 ID 和地址来自预订模型。
在我的控制器中使用下面的代码,我可以获得服务名称、预订 ID 和状态,但我只得到所有预订的一项费用、税金和金额,尽管它们在各自的表格中是唯一的。
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'));
}
这就是我在控制器和视图中使用的 for each 循环两次,首先循环遍历 $products,然后循环遍历 $charges。
我会不会做错了什么,我该如何纠正?
我建议使用联接从多个数据中获取数据 table,因此您会想这样做,
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'));
}
我刚刚根据您的解释假设了每个 table 中的列名称,因此如果它们恰好不同,只需适当更改即可。
我想获取有关预订的详细信息,详细信息是预订的服务、每项服务的费用、收取的税款和总金额,以及状态
成本、税金和总金额来自收费模型,状态来自状态模型,服务名称来自服务模型,预订 ID 和地址来自预订模型。
在我的控制器中使用下面的代码,我可以获得服务名称、预订 ID 和状态,但我只得到所有预订的一项费用、税金和金额,尽管它们在各自的表格中是唯一的。
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'));
}
这就是我在控制器和视图中使用的 for each 循环两次,首先循环遍历 $products,然后循环遍历 $charges。
我会不会做错了什么,我该如何纠正?
我建议使用联接从多个数据中获取数据 table,因此您会想这样做,
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'));
}
我刚刚根据您的解释假设了每个 table 中的列名称,因此如果它们恰好不同,只需适当更改即可。