将更复杂的sql查询转换为雄辩的查询(模型)

5q4ezhmt  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(313)

我试图将我的php/js应用程序转换成一个laravel项目,但是我对laravel和它们之间的雄辩关系还很陌生。
到目前为止,我已经创建了一个具有以下功能的用户模型,将db关系描述为雄辩的关系:

public function configs() {
    return $this->hasMany('App\Configuration', 'user_id');
}

public function rooms() {
    return $this->hasManyThrough('App\Room','App\Configuration','user_id','config_id','id','id');
}

和一个 Room 具有关系的模型:

public function configs() {
    return $this->hasMany('App\Configuration', 'config_id');
}

public function user() {
    return $this->hasOneThrough('App\Configuration', 'App\User', 'user_id','config_id','id','id');
}

这个 Configuration.php 还没有任何有力的关系。
我的问题是:我想让所有的房间都有他们的房间 config_id 对于请求用户。这是我的sql查询:

SELECT *
FROM rooms
INNER JOIN configurations ON rooms.config_id = configurations.id
INNER JOIN users ON  configurations.user_id = users.id
WHERE user_id = 4
ORDER BY config_id

我也有红色的文件,但事情仍然不会进入我的头脑,如果我必须作出更“复杂”的查询如上所述。
我的尝试是这样的:

$user_id = Auth::user()->id;
$projects = Room::with('Confuguration')
->whereHas('configs', function($q) use ($user_id){
      $q->where('config_id', 'like', $user_id);
})->get();

return view('home', compact('projects'));
kh212irz

kh212irz1#

您需要为当前用户添加所有带有文件室的配置标识。
文件室模型已经有一个列名'config\u id',因此不需要配置表信息。。。
在房间模型中,我们有一个名为“user”的关系(应该是带有“s”的用户),我们可以将它与wherehas结合使用

$projects = Room::whereHas('user', function($q) use ($user_id){
      $q->where('id', '=', $user_id);
})->get();

如我所说,现在的项目将是用户的房间包括'config\u id',所以不需要加载'configs'关系

相关问题