Свойство [X] не существует в этой связи экземпляра коллекции - PullRequest
0 голосов
/ 29 мая 2018

Я использую много реалий в 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 голосов
/ 07 февраля 2019

Лучше использовать has ()

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

Запрос наличия отношений https://laravel.com/docs/5.7/eloquent-relationships#querying-relations

0 голосов
/ 30 мая 2018

Проблема в следующей строке:

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

По вашему мнению.

Вы установили свои отношения как отношения hasMany, которые будут возвращать коллекцию моделей.

Если вы сделаете dd($phonebook->client), он вернет коллекцию, а не одну модель.

Он пытается вызвать свойство title объекта коллекции, а не модели.

Вам нужно изменить определение отношения на hasOne(), ИЛИ сделать что-то вроде:

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

(или альтернативно):

{{ $phonebook->client->get(0)->title }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...