Laravel get какие категории принадлежат зарегистрированному пользователю в ManyToMany
в моем простом веб-приложении блога у меня есть некоторые categories
и users
, которые хранятся в базе данных, каждый category
может принадлежать одному или нескольким пользователям, и я пытаюсь заставить их показать каждого зарегистрированного пользователя, для реализации этого сценария у меня есть эти таблицы:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id')->index()->nullable();
$table->foreign('user_id')->references('id')->on('users');
$table->string('name')->nullable();
$table->string('family')->nullable();
$table->string('username')->unique();
$table->rememberToken();
$table->softDeletes();
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
});
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('category_id')->index()->nullable();
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->string('category_name');
$table->softDeletes();
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
});
а затем, создав таблицу many to many
:
Schema::create('category_user', function (Blueprint $table) {
$table->unsignedBigInteger('user_id')->index();
$table->unsignedBigInteger('category_id')->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->primary(['user_id','category_id']);
});
теперь как я могу получить категории зарегистрированных пользователей, как с помощью этого кода:
$categories = Category::whereNull('category_id')
->with(['childrenCategories', 'users' => function ($query) {
//$query->where('id',auth()->user()->id);
}])
->withCount('posts')
->get();
Ответы - Laravel get какие категории принадлежат зарегистрированному пользователю в ManyToMany / Laravel get which Categories belong to logged user in ManyToMany

31.10.2020 10:29:19
внутри вашей пользовательской модели добавьте отношение между обеими моделями:
public function categories()
{
return $this->belongsToMany('App\Models\Category');
}
внутри вашего контроллера:
$user = App\Models\User::find(1);
теперь вы можете получить категории вашего пользователя
foreach ($user->categories as $category) {
//
}
https://laravel.com/docs/8.x/eloquent-relationships#many-to-many

31.10.2020 10:34:32
Вы можете запросить существование отношений с помощью whereHas
, чтобы получить только те категории, которые принадлежат аутентифицированному пользователю.
$categories = Category::whereNull('category_id')
->whereHas('users', function ($query) {
$query->where('id', auth()->user()->id);
})
->with([
'childrenCategories',
'users' => function ($query) {
$query->where('id', auth()->user()->id);
}
])
->withCount('posts')
->get();