此集合实例laravel关系中不存在属性[X]

时间:2018-05-29 20:49:48

标签: php laravel view controller

我在laravel 5.6中使用了很多现实,当我点击$ phonebooks时,我看到所有的关系都正常工作,每件事情都很好但是当我试图在视图中显示它时我得到的属性错误不存在在这个集合上 这是关系代码

public function client() {
    return $this->hasMany('App\Client','id' , 'client_id');
}

这是控制器

public function index()
{    $phonebooks = Phonebook::with('client')->get();

    return view('admin.phonebooks.index',compact('phonebooks',$phonebooks));
}

最后这是我如何尝试在视图中显示它们

<tbody>
@foreach($phonebooks as $phonebook)
    <tr>
        <th scope="row">{{$phonebook->id}}</th>
        <th scope="row">{{$phonebook->title}}</th>
        <td><a href="/admin/phonebooks/{{$phonebook->id}}">{{$phonebook->description}}</a></td>
        <td>{{$phonebook->calldate}}</td>
        <td>{{$phonebook->created_at->toFormattedDateString()}}</td>

        <td>{{ $phonebook->client->title}}</td>
        <td>
            <div class="btn-group" role="group" aria-label="Basic example">
                <a href="{{ URL::to('admin/phonebooks/' . $phonebook->id . '/edit') }}">
                    <button type="button" class="btn btn-warning">ویراییش</button>
                </a>&nbsp;
                <form action="{{url('admin/phonebooks', [$phonebook->id])}}" method="POST">
                    <input type="hidden" name="_method" value="DELETE">
                    <input type="hidden" name="_token" value="{{ csrf_token() }}">
                    <input type="submit" class="btn btn-danger" value="حذف"/>
                </form>
            </div>
        </td>
    </tr>
@endforeach
</tbody>

这里是dd的一部分结果

Collection {#630 ▼  #items: array:3 [▼
0 => Phonebook {#572 ▼
  #fillable: array:5 [▶]
  #connection: "mysql"
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:8 [▶]
  #original: array:8 [▶]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:1 [▼
    "client" => Collection {#627 ▼
      #items: array:1 [▼
        0 => Client {#621 ▼
          #connection: "mysql"
          #table: null
          #primaryKey: "id"
          #keyType: "int"
          +incrementing: true
          #with: []
          #withCount: []
          #perPage: 15
          +exists: true
          +wasRecentlyCreated: false
          #attributes: array:16 [▼
            "id" => 1

并且就像这样下降。

2 个答案:

答案 0 :(得分:1)

问题在于这一行:

{{ $phonebook->client->title}}

在您看来。

您已将关系设置为hasMany关系,这将返回一系列模型。

如果你dd($phonebook->client),它将返回一个集合,而不是一个模型。

它试图在集合对象上调用属性title,而不是模型。

您需要将关系定义更改为hasOne(),或执行以下操作:

{{ $phonebook->client->first()->title }}

(或者):

{{ $phonebook->client->get(0)->title }}

答案 1 :(得分:0)

更好地使用has()

$phonebooks = Phonebook::has('client')->get();

查询关系存在 https://laravel.com/docs/5.7/eloquent-relationships#querying-relations