我试图返回一个有2个表的视图,orders和order_menu。我想要做的是在我的视图中显示客户基于order_id订购的订单。
这是orders的数据库表,这是order_menu的数据库表。
我试着在我的控制器中使用连接表,但它不起作用。这是我的控制器:
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,
]);
}有没有解决这个问题的办法?
发布于 2021-02-16 17:16:59
您只需要在查询中为order id添加一个筛选器,我假设$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')
->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);发布于 2021-02-16 16:25:58
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,
]);
}https://stackoverflow.com/questions/66219776
复制相似问题