我试图将我的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'));
1条答案
按热度按时间kh212irz1#
您需要为当前用户添加所有带有文件室的配置标识。
文件室模型已经有一个列名'config\u id',因此不需要配置表信息。。。
在房间模型中,我们有一个名为“user”的关系(应该是带有“s”的用户),我们可以将它与wherehas结合使用
如我所说,现在的项目将是用户的房间包括'config\u id',所以不需要加载'configs'关系