Отображение сообщений одной категории с помощью OctoberCMS - PullRequest
0 голосов
/ 26 марта 2020

У меня есть категории таблиц с полями - id, category.
У меня есть записи таблицы с полями - id, title, description.
У меня есть сводная таблица с полями - category_id, post_id.

Как создать маршрут, который будет отображать все сообщения из одной категории? Я пробовал:

Route::get('category/{id}', function($id) {
  $posts = Post::with(['image','category'])->where('category.id', $id)->get();
  return $posts;
});

, но я получаю неизвестную ошибку столбца.

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

Есть несколько способов решить эту проблему. Я покажу вам способ 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}. Это избавит вас от многих головных болей в будущем. Это также сэкономит много головной боли людям, которые смотрят на ваш код.

1 голос
/ 26 марта 2020

Во-первых, вы должны определить в своей Post модели отношения следующим образом:

public $belongsToMany = [
    'categories' => [
        'Your\PLugin\Models\Category',
        'table'    => 'categories_table',
        'key'      => 'post_id',
        'otherKey' => 'category_id'
    ],
];

Затем вы можете получить доступ к своим категориям, связанным с публикацией, следующим образом:

$post = Post::find($post_id);
$post_categories = $post->categories;
...