Есть несколько способов решить эту проблему. Я покажу вам способ laravel с методом whereHas
. Вы можете посмотреть документацию здесь . Я едва использовал метод with
, поэтому вам, возможно, придется поэкспериментировать, но я бы так и сделал.
$posts = Post::with('image')->whereHas('category', function ($category) use ($id) {
$category->where('id', $id);
})->get();
Почему я думаю, что ваш запрос не работает, потому что ваш ->where('category_id', $id)
сделано непосредственно на модели Post, у которой нет ставки category_id
. Вы не получите доступ к полям сводной таблицы из одной из моделей отношений. Вы всегда можете посмотреть на атрибуты коллекции, выполнив команду ad ie и dump; dd($posts)
.
Также большой совет для размышлений в будущем - создавать / использовать явные переменные. Вместо использования category/{id}
используйте category/{categoryId}
. Это избавит вас от многих головных болей в будущем. Это также сэкономит много головной боли людям, которые смотрят на ваш код.