Laravel get какие категории принадлежат зарегистрированному пользователю в ManyToMany


Laravel get какие категории принадлежат зарегистрированному пользователю в ManyToMany

31.10.2020 10:17:38 Просмотров 13 Источник

в моем простом веб-приложении блога у меня есть некоторые 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

Mainhattan

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

Является ответом!
porloscerros Ψ

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();
Помочь в развитии проекта:
Закрыть X