Не удается получить доступ к свойству laravel eloquent в файле blade

#laravel #laravel-7

Вопрос:

Я получаю данные следующим образом от контроллера:

 public function show($id)
{
     $news = News::select('id','heading', 'body', 'image','category')->with('newsCategory')->where('id', $id)->first();
     return view('pages.news_details')->with('news', $news);
}
 

Новостная модель-это

 public function newsCategory()
{
   return $this->belongsTo(Category::class, 'category');
}
 

и я получил успешный ответ

 {"id":1,"heading":"Fugiat veniam nons.",
"body":"lorem ipsum dolor sit amet",
"image":null,
"category":4,
"news_category":{"id":4,"title":"health care","created_at":null,"updated_at":null}}
 

Тем не менее, я пытаюсь получить доступ к нему в файле blade. Все свойства доступны, за исключением news-category . Вот как я пытаюсь получить к нему доступ

 $news->news_category->title
 

dd($news->toArray()) ВОЗВРАТ

введите описание изображения здесь

Но это не работает. Как я могу получить доступ к собственности таким образом ?

Комментарии:

1. Отношения таковыми newsCategory не news_category являются .

2. dd($news->toArray()); перед возвращением просмотра и публикацией его в question

3. добавлено @JohnLobo

4. попробуйте $новости->Категория новостей ->>заголовок

5. ООО..! Это сработало. Но вопрос в том, что это news_category в dd, но почему newsCategory сработало ?

Ответ №1:

Как уже писали в комментариях, вы пытаетесь получить доступ к неправильному свойству.

В вашей News модели вы определили свойство newsCategory и нет news_category . Таким образом, собственность news_category не существует.

Переключите свой код в режиме Blade на

$news->newsCategory->title

…тогда это должно сработать.

Ответ №2:

При преобразовании модели в массив или json laravel преобразует имена отношений в регистр змеи. Вот почему это показано как news_category .

В вашем файле blade вы все еще имеете дело с красноречивым объектом, поэтому он еще не был преобразован в случай змеи. Таким образом, в вашем php-коде вам необходимо получить к нему доступ, newsCategory поскольку именно так была определена связь.

Вы можете управлять этим поведением, используя статическое snakeAttributes свойство модели.

    **
     * Indicates whether attributes are snake cased on arrays.
     *
     * @var bool
     */
    public static $snakeAttributes = false;