php - Laravel在ManyToMany中获取哪些类别属于登录用户
问题描述
在我的简单博客 Web 应用程序中,我有一些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();
解决方案
您可以查询关系是否存在以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();
推荐阅读
- spring - 如何使用 application.properties 设置 sessionFactory 属性
- excel - 使用特殊情况对字母 + 数字进行排序的宏
- java - 使用 Cloud Firestore 从单个文档中获取列表对象
- c++ - 运行具有外部依赖项的 VC++ 单元测试时“无法设置执行上下文”
- c++ - 错误:重载运算符'[]'的使用不明确(操作数类型为'ObjA_'和'char [5]')
- python-3.x - 使用 Keras 中的专门设置进行时间预测
- connection - Apache Airflow 中与 redshift 的连接错误
- laravel - 添加新的刀片指令(前缀和后缀字段?)[PhpStorm]
- postgresql - 如何将 SELECT 嵌套到 PL/pgSQL 中的 UPDATE 语句中
- python - Google Colab 没有更新软件包?