Как вернуть данные из 2 таблиц с внешними ключами в laravel

#php #html #laravel

#php #HTML #laravel

Вопрос:

Я пытаюсь вернуть представление с 2 таблицами, orders и order_menu . Что я хочу сделать, так это отобразить, какие заказы заказал клиент на основе order_id на мой взгляд.

Вот таблица базы данных для заказов, а это таблица базы данных для order_menu.

Я пытался использовать join table в своем контроллере, но это не сработает. Вот мой контроллер:

  public function show(Order $order)
 {
    $data = DB::table('order_menu')
        ->join('menus', 'menus.id', '=', 'order_menu.menu_id')
        ->join('orders', 'orders.id', '=', 'order_menu.order_id')
        ->select('orders.*', 'menus.name', 'order_menu.quantity')
        ->get();

    return view('admin.order.detail')->with([
        'order' => $order,
        'data' => $data,
    ]);
}
 

Есть ли какие-либо решения для решения этой проблемы?

Комментарии:

1. Можете ли вы определить, но это не сработает , что не работает? в чем именно проблема?

2. @MKhalidJunaid он извлекает все данные order_menu , в то время как мне нужны только те данные, которые связаны с идентификатором в order таблице.

Ответ №1:

Вам просто нужно добавить фильтр для идентификатора заказа в свой запрос, я полагаю $order , это экземпляр model и имеет данные заказа

 $data = DB::table('order_menu')
    ->join('menus', 'menus.id', '=', 'order_menu.menu_id')
    ->join('orders', 'orders.id', '=', 'order_menu.order_id')
    ->select('orders.*', 'menus.name', 'order_menu.quantity')
    ->where('orders.id', $order->id)
    ->get();
 

Или, если у вас уже есть отношения в вашей модели, то с помощью eloquent вы можете запросить данные как

 class Order extends Model
{
    public function menus()
    {
        return $this->belongsToMany(Menu::class, 'order_menu ', 'order_id', 'menu_id')->withPivot('quantity');
    }
}
class Menu extends Model
{
    public function orders()
    {
        return $this->belongsToMany(Order::class, 'order_menu ', 'menu_id','order_id');
    }
}

$data = Order::with('menus')->find($order->id);
 

Ответ №2:

     public function show(Order $order)
{
    $data = DB::table('orders*')
        ->join('order_menu*', 'order_menu.id', '=', 'orders.id')
        ->groupBy('orders.id')
        ->get();

    return view('admin.order.detail')->with([
        'data' => $data,
    ]);
}
 

Комментарии:

1. Я попробовал это, но я получаю сообщение об ошибке «Базовая таблица или представление не найдены: 1146 Таблица ‘mieac.orders*’ не существует»