首页 > 解决方案 > 在 Laravel 中显示从一个到 hasMany 的关系

问题描述

我想在视图中显示我的位置名称,但我不明白我做错了什么。

位置模型-

public function orderz()
{
    return $this->hasMany('App\Models\Order', 'location', 'location_id');
}
}

订单模式

public function location()
{
    return $this->belongsTo('App\Models\Order');
}

LocationsController.php -

public function show($id)
{
    $locations = Location::find($id)->orderz()->whereDate('created_at', '=', Carbon::today()->toDateString());
    $orders = Order::all();
    $wallets = Wallet::all();
    //$orders = DB::table('orders')->where('location', '=', 'New York')->get();
    return view('location')
        ->with('locations', $locations)
        ->with('wallets', $wallets)
        ->with('orders', $orders);
}

我这样称呼它:

@foreach ($locations as $location)
    @foreach($location->orders as $order)
        {{$order->location_id}}
    @endforeach
@endforeach

当我从我的代码日期过滤器中删除它时它可以工作,但我正在显示所有日子的订单。

        $locations = Location::find($id)->orders()->whereDate('created_at', '=', Carbon::today()->toDateString());

看起来像这样:

$locations = Location::find($id)->orders;

标签: phplaravel

解决方案


确保在您的一对多关系中,第二个参数必须是您的 Order 模型中的外键。Eloquent 将自动确定 Order 表上正确的外键列。现在你们的关系一定是。

public function orderz()
{
    return $this->hasMany('App\Models\Order', 'foreign_key_in_order_model', 'primary_key_in_location_model');
}

您的最终代码应如下所示。

 public function orderz()
 {
     return $this->hasMany('App\Models\Order', 'location_id', 'location');
 }

推荐阅读