laravel 4 - select 中的 3 个模型与关系 whereHas 查询
3 models in laravel 4 - select with relation whereHas Query
我有 3 个模型:
- 用户
- 星球
- 太阳系
关系:
在用户模型中:
public function planets() {
return $this->hasMany('Planet');
}
在行星模型中:
public function sunsystem() {
return $this->belongsTo('Sunsystem');
}
public function user() {
return $this->belongsTo('User');
}
而在太阳系模型中:
public function planets() {
return $this->hasMany('Planet');
}
现在我想要 select 所有太阳系和所有相关行星
但只有相关行星属于实际用户的太阳系(在本例中 ID 为 12)。
但是我是如何得到正确结果的呢?
这是我尝试的方法,但它只给了我一个太阳系统,但我希望有 2 个太阳系统。我认为我的查询是错误的...:[=17=]
$s = Sunsystem::whereHas('Planets', function($q) {
$q->whereHas('User', function ($u) {
$u->whereUserId(12);
});
})->get();
这也行不通:
$s = Sunsystem::select('Sunsystems.*')
->join('planets','planets.sunsystem_id','=','sunsystems.id')
->join('users','users.id','=','planets.user_id')
->where('users.id','=',12)
->get();
如果有 2 个 sunsystem_id 但相同 user_id 的行星,我只得到一个太阳系,但我希望有两个。
请试一试
$s = Sunsystem::select('Sunsystems.*')
->join('planets','planets.sunsystem_id','=','Sunsystems.id')
->join('users','users.id','=','planets.user_id')
->where('users.id','=',12)
->get();
我有 3 个模型:
- 用户
- 星球
- 太阳系
关系:
在用户模型中:
public function planets() {
return $this->hasMany('Planet');
}
在行星模型中:
public function sunsystem() {
return $this->belongsTo('Sunsystem');
}
public function user() {
return $this->belongsTo('User');
}
而在太阳系模型中:
public function planets() {
return $this->hasMany('Planet');
}
现在我想要 select 所有太阳系和所有相关行星 但只有相关行星属于实际用户的太阳系(在本例中 ID 为 12)。 但是我是如何得到正确结果的呢? 这是我尝试的方法,但它只给了我一个太阳系统,但我希望有 2 个太阳系统。我认为我的查询是错误的...:[=17=]
$s = Sunsystem::whereHas('Planets', function($q) {
$q->whereHas('User', function ($u) {
$u->whereUserId(12);
});
})->get();
这也行不通:
$s = Sunsystem::select('Sunsystems.*')
->join('planets','planets.sunsystem_id','=','sunsystems.id')
->join('users','users.id','=','planets.user_id')
->where('users.id','=',12)
->get();
如果有 2 个 sunsystem_id 但相同 user_id 的行星,我只得到一个太阳系,但我希望有两个。
请试一试
$s = Sunsystem::select('Sunsystems.*')
->join('planets','planets.sunsystem_id','=','Sunsystems.id')
->join('users','users.id','=','planets.user_id')
->where('users.id','=',12)
->get();