从Laravel中的多个表获取数据

时间:2019-04-20 12:30:54

标签: laravel-5.7

我想获取有关预订的详细信息,这些详细信息是预订的服务,其中包括各项服务的费用,所收取的税款和总金额以及状态

费用,税金和总金额来自“费用”模型,来自“状态”模型的状态,来自“服务”模型的服务名称,以及来自“预订”模型的预订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'));
    }

这就是我在控制器中所拥有的,并且在视图中,我对每个循环使用a两次,首先遍历$ products,然后遍历$ charges。

我做错什么了,我该如何纠正?

1 个答案:

答案 0 :(得分: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'));
 }

我只是根据您的解释在每个表中假设了您的列名,因此,如果它们恰好不同,则进行适当更改。