Laravel的关系很多都没有用

时间:2018-06-15 08:18:36

标签: laravel error-handling relationships

我想通过在'finished_by'列中找到用户名来打印用户名,其中存储了用户ID。但我得到这个错误:

  

尝试获取非对象的属性“名称”

广告资源模型的finished_by具有用户ID。

这是我的blade.php

@foreach($inventories as $inventory)
    <tr>
      <td>{{$inventory['id']}}</td>
      <td>{{$inventory->user->name}}</td>   
    </tr>
@enforeach

和我的索引方法

$company_id = Auth::user()->company_id;
$inventories = Inventory::where('company_id',$company_id)->get();

return view('inventories', compact('inventories', 'companies'));

和我的关系

Inventory.php

public function users(){
    return $this->belongsTo(User::class, 'finished_by');
}

user.php的

public function inventories(){
    return $this->hasMany(Inventory::class, 'finished_by');
}

4 个答案:

答案 0 :(得分:0)

首先改变您的关系

Inventory.php

public function user(){
    return $this->belongsTo("App\User", 'finished_by');
}

user.php的

public function inventories(){
    return $this->hasMany("App\Inventory", 'finished_by');
}

您需要在急切加载中添加user关系

$inventories = Inventory::where('company_id',$company_id)->with('user')->get();
  

现在模板渲染

@foreach($inventories as $inventory)
    <tr>
        <td>{{$inventory->id}}</td>
        <td>
           @if($inventory->user)
              {{$inventory->user->name}}
           @else
              'No User'
           @endif
        </td>   
    </tr>
@enforeach

答案 1 :(得分:0)

我不确切知道您拥有哪些字段,但测试此代码:

@foreach($inventories as $inventory)
    <tr>
        <td>id : {{$inventory['id']}}</td>
        <td>name : {{$inventory->users->toArray()['name']}}</td>
    </tr>
@endforeach

答案 2 :(得分:0)

这是因为您已在广告资源模型中定义用户,但您已在刀片文件中调用用户,因此您必须更改功能:

public function user(){
    return $this->belongsTo(User::class, 'finished_by');
}

答案 3 :(得分:0)

更新控制器的代码//您需要添加关系

$inventories = Inventory::where('company_id',$company_id)->with('user')->get();