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

У моего бизнеса может быть много страниц, и здесь я определяю свою модель:

class PageList extends Model
{
    public function business()
    {
        return $this->hasMany('App\Business','business_id');
    }
}

Мой контроллер

public function pageListHere()
{
    $list = PageList::all();
    return view('page-list',compact('list'));
}

и мой взгляд на каждую петлю

<td>{{optional($value->business)->business_url}}.spikesales.io/{{$value->page_url}}</td>

В моем сообщении, если я делаю hasOne('App\Business','business_id');, он работает нормально, но отображает только одну страницу по отношению к бизнесу, но у меня есть несколько страниц в моей базе данных, и одна компания может иметь много страниц, и если напишите hasMany('App\Business','business_id');, это покажет мне ошибку Свойство [business_url] не существует в этом экземпляре коллекции

Я хочу показать несколько страниц для одного бизнеса. Ваша помощь будет высоко оценена!

Ответы [ 2 ]

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

Я думаю, вы немного смущены. В вашей модели вы фактически определяете отношение A page has many businesses и говорите, что в таблице businesses есть столбец business_id, который Laravel попытался найти, но не смог, что привело к ошибке.


Функция hasMany работает следующим образом:

// In the Post Model...
public function comments() {
    return $this->hasMany('App\Comment', 'post_number');
}

Это делает соотношение A Post has many Comments и заставляет Ларавела предположить, что таблица comments имеет post_number столбец .


Вы хотите показать несколько страниц для одной компании. Итак, A business has many Pages. Для его кодирования ...

// In your BUSINESS model...
public function pages() {
    // Notice that $this refers to the Business Model
    return $this->hasMany('App\PageList', 'business_id');
}

Вы можете (но я думаю, что вы должны) опустить часть 'business_id'. Это будет безопасно предполагаться по умолчанию.

И обратное отношение, A Page belongs to A business, будет закодировано как ...

// In your PAGELIST model...
public function business() {
    return $this->belongsTo('App\Business');
}
0 голосов
/ 02 мая 2018

Вам нужно перебрать / перебрать деловые отношения, так как результат вернется в массив коллекции:

@foreach($lists as $list)
   // others markup
   @foreach($list->business as $business)
      // do something here
      {{ $business->business_url }}
   @endforeach
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...