Получение данных из нескольких таблиц в Laravel - PullRequest
1 голос
/ 20 апреля 2019

Я хотел бы получить подробную информацию о бронировании, информация о сервисе, зарезервированном для стоимости каждой услуги, взимаемого налога и общей суммы, а также статус

Стоимость, налог и общая сумма зависят от модели начисления, статуса от модели состояния, названия службы от модели службы и идентификатора бронирования и адреса от модели бронирования.

Используя приведенный ниже код в моем контроллере, я могу получить название службы, идентификатор бронирования и статус, но я получаю только одну стоимость, налог и сумму за все бронирования, несмотря на то, что они уникальны в соответствующих таблицах.

    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, а затем цикл $$.

Могу ли я сделать что-то не так и как я могу это исправить?

1 Ответ

1 голос
/ 23 апреля 2019

Я бы предложил использовать объединения для получения данных из более чем одной таблицы, поэтому вы хотели бы сделать это следующим образом:

    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'));
 }

Я только что предположил имена ваших столбцов в каждой таблице на основе вашего объяснения, поэтому, если они отличаются, просто измените их соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...