У меня есть три таблицы, и я хочу связать все 3, но я не знаю, как.
У меня есть таблица для пользователей и еще две для постов и категорий, а также категорий магазинов категорий и подкатегории в той же таблице (с отдельным столбцом типа).
Сообщения и пользователи имеют сводную таблицу, а также сообщения и категории. Но я хочу получать сообщения пользователей по таким категориям, как:
Категория или подкатегория -> Сообщения -> Пользователь
Модель категории:
class Category extends Model
{
protected $fillable = ['name', 'description', 'type', 'category_id','post_id'];
public function posts() {
return $this->belongsToMany(Post::class)->withPivot('post_id');
}
}
Почтовая модель:
class Post extends Model {
public function users() {
return $this->belongsToMany(User::class, 'post_user','post_id', 'user_id')->withTimestamps();
}
public function categories() {
return $this->belongsToMany(Category::class)->withPivot('category_id');
}
Модель пользователя:
class User extends Authenticatable {
public function posts() {
return $this->belongsToMany(Post::class, 'post_user', 'user_id', 'post_id')->withTimestamps();
}
Тогда в контроллере у меня только это
$posts = Category::with('posts')->get();
Я не знаю, как соотнести эти 3 таблицы. Может быть, мне нужно сделать только одну сводную таблицу между 3 таблицами?
Редактировать: Благодаря Qirel , чтобы помочь мне связать таблицы:
Category::with('posts.users');
Затем я хочу показать только категории, в которых указанный пользователь c имеет сообщения, например что-то вроде
Category::with('posts.users')->where('user.id',1);
Возможно?