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

Я пытаюсь просмотреть детали определенного c сообщения или идентификатора. Но это ошибка. Примечание: я хочу использовать get(), а не first().

Ошибка:

Свойство [имя] не существует в этом экземпляре коллекции. (Представление: C: \ xampp \ htdocs \ myBlog \ resources \ views \ post \ viewPost.blade. php)

1. allPostView.blade. php

a href="{{ URL::to('view/post/'.$row->id) }}"

2. сеть. php

Route::get('view/post/{id}','PostController@viewPost');

3. PostControler. php [Просмотр / чтение сообщения (подробное представление определенного сообщения c или)]

public function viewPost($id){
    $post=DB::table('posts')
    ->join('categories','posts.category_id','categories.id')
    ->select('posts.*','categories.name')
    ->where('posts.id',$id)
    ->get();

    //return response()->json($post);
    return view('post.viewPost', compact('post'));
}

4. viewPost.blade. php Окончательный просмотр страницы

Category name: {{ $post->name }}

{{ $post->title }}

img src="{{URL::to($post->image)}}" style="height: 200px; width:400px;"

{{ $post->details }}
Но когда я использую return response()->json($post);, это дает мне данные, как и ожидалось. Как:

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

1 Ответ

0 голосов
/ 14 марта 2020

Метод get() возвращает коллекцию, которая является оберткой для массивов в Laravel. Поскольку у вас есть предложение where для id, вам нужен отдельный объект, и вы можете использовать first() вместо него.

$post = DB::table('posts')
    ->join('categories', 'posts.category_id', 'categories.id')
    ->select('posts.*', 'categories.name')
    ->where('posts.id', $id)
    ->first();

Альтернативное решение

Даже ваше решение очень оптимально, есть более практичные решения для работы с отношениями, включенные в Laravel.

Определите ваши отношения.

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

Теперь стремитесь загрузить категорию, прежде чем запрос будет выполнен .

$post = Post::with('category')->find($id);

По вашему мнению, вы можете просто получить доступ к названию категории через отношения в довольно оптимальном плане выполнения запроса. Между тем, ваш код стал более читабельным и понятным, и, на мой взгляд, это правильный Laravel способ сделать это.

{{ $post->category->name }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...