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

Php 此集合实例laravel关系上不存在属性[X],php,laravel,view,controller,Php,Laravel,View,Controller,我使用的是laravel 5.6中的许多不动产,当我添加$phonebooks时,我看到所有关系都正常工作,一切都很好,但当我试图将它们显示在视图中时,我发现此集合中不存在不动产错误 这是关系码 public function client() { return $this->hasMany('App\Client','id' , 'client_id'); } 这是控制器 public function index() { $phonebooks = Phonebook:

我使用的是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>

它就这样下降。

问题是这条线:

{{ $phonebook->client->title}}
在你看来

您已将关系设置为一个
hasMany
关系,它将返回一组模型

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

它试图调用集合对象而不是模型的属性
title

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

{{ $phonebook->client->first()->title }}
(或选择):

更好地使用has()

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

查询关系是否存在

$phonebook->Client->title,c不应该是小写的吗?try Client not Clientit在我的代码中是小写的对不起,我在这里输入了错误,但尝试了两者,没有运气将
compact('phonebooks',$phonebooks)
替换为just
compact('phonebooks')
@PhilCross刚刚这么做了,但没有运气,同样的错误:({{$phonebook->client->first()->title}}这对我来说真的是个窍门,我真的不知道,我试着越来越多地阅读你的答案,甚至更多地了解那里发生了什么:)因为laravel没有提到在hasMany realtion中,你会得到类似于collection object的东西:)多亏了你,你救了我一天;)任何名称中有
Many
的关系,例如,
hasMany
BelongTomany
都会返回一个collection object。例如,当你定义关系时,你的电话簿/客户关系,读它,因为
电话簿有许多客户
,或者
客户属于电话簿
。哦,我想:)那很简单:P谢谢你,菲尔,你帮了我很多忙。你也可以这样做,这可能更方便:1.将你的函数名更改为->客户(),然后2.在您的视图中,您可以这样做->foreach($phonebook->clients as$client)://访问客户端endforeach;
{{ $phonebook->client->first()->title }}
{{ $phonebook->client->get(0)->title }}