我正在创建一个管理面板,我的数据库中有3个表:组,角色,用户。我在users表和roles表之间有很多关系。 没有解释此功能的laravel文档。
public function roles() {
return $this->belongsToMany('App\Models\Role', 'user_roles');
}
我在groups表和users表之间有一对多的关系。
public function group() {
return $this->belongsTo('App\Models\Group');
}
现在我想通过急切加载将过滤器应用于查询。有了这些,我想添加以下动态过滤器。
public function scopeStatus($query, $status = null) {
// If status is empty then return the query itself
if (is_null($status)) {
return $query;
}
return $query->where('status', $status);
}
public function scopeRole($query, $role = null) {
// If role is empty then return the query itself
if (is_null($role)) {
return $query;
}
return $query->where('role', $role);
}
public function scopeGroup($query, $group = null) {
// If group is empty then return the query itself
if (is_null($group)) {
return $query;
}
return $query->where('group_id', $group);
}
这样我就可以进行一些查询,比如[状态和group_id只是用户表中的列]
$users = User::with([
'roles' => function ($query) use ($request) {
$query->role($request['role']);
},
'group' => function($query) use ($request) {
$query->group($request['group']);
}
])
->status($request['status'])
->paginate(20);
但这不起作用。我是通过AJAX请求执行此操作,并且已经测试了请求参数。这是我dd($request);
时得到的。
array:3 [▼
"group" => "1"
"role" => "1"
"status" => "1"
]
一切看起来都不错,但我总是接收并清空对象。请大家帮忙。
答案 0 :(得分:0)
我找到了解决问题的方法。我已经意识到,通过急切加载,您无法在约束它们时添加范围。您必须在闭包或查询构建器中执行所有条件语句。
所以我的问题是所有的范围,但不需要状态。这是新代码:
<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
x.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
</script>