[英]Using whereHas eloquent relationship query
I have the following tables : Users 我有以下表格:用户
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('username');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->integer('role_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles');
Areas 地区
Schema::create('areas', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('location_id')->unsigned();
$table->foreign('location_id')->references('id')->on('locations')->onDelete('cascade');
$table->timestamps();
area_user area_user
Schema::create('area_user', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->integer('area_id')->unsigned();
$table->foreign('area_id')->references('id')->on('areas');
});
Buildings 房屋
Schema::create('buildings', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('symbol')->nullable();
$table->integer('area_id')->unsigned();
$table->foreign('area_id')->references('id')->on('areas')->onDelete('cascade');
$table->integer('building_type')->unsigned();
$table->foreign('building_type')->references('id')->on('building_types');
$table->timestamps();
});
User Model: 用户模型:
public function areas()
{
return $this->belongsToMany('App\Area');
}
Area Model: 区域模型:
public function users(){
return $this->belongsToMany('App\User');
}
Building Model: 建筑模型:
public function area(){
return $this->belongsTo('App\Area','area_id');
}
How can i write a query in User model that return all Buildings assigned to a user through his assigned areas (area_user table) I tried this , but it returning an error 我如何在用户模型中编写查询,以返回通过用户分配的区域(area_user表)分配给用户的所有建筑物,我尝试了此方法,但是返回了错误
Building::whereHas('area', function ($q) {
$q->whereHas('users', function ($q) {
$q->where('id', auth()->id());
});
})->get();
Error: 错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select * from `buildings` where exists (select * from `areas` where `buildings`.`area_id` = `areas`.`id` and exists (select * from `users` inner join `area_user` on `users`.`id` = `area_user`.`user_id` where `areas`.`id` = `area_user`.`area_id` and `id` = 11))) (View: C:\xampp\htdocs\hse\resources\views\observations\form_observation.blade.php) (View: C:\xampp\htdocs\hse\resources\views\observations\form_observation.blade.php)
You can resolve the ambiguity by specifying the table in your where clause: 您可以通过在where子句中指定表来解决歧义:
Change 更改
$q->where('id', auth()->id());
To 至
$q->where('users.id', auth()->id());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.