Метод 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 }}