我有一个项目模型和一个用户模型。 在用户模型中具有检查用户是否具有权限的功能:
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
public function hasPermission($permission){
$code = Permission::where('name',$permission)->first()->id-1;
$total = $this->group->permissions;
return ($total & pow(2,$code));
}
}
我正在尝试通过此功能过滤项目,例如:
Items::where('sell_price','>',0)->where('user.hasPermission','SellItems');
项目模型如下:
class Items extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
}
答案 0 :(得分:0)
嗨,我认为您正在寻找whereHas方法: https://laravel.com/docs/5.8/eloquent-relationships#querying-relationship-existence
那应该可以让您启动并运行!
注释中提到的示例(请注意,未对此进行测试):
Item::whereHas('user', function($q) use ($permission) {
//your permission query here you can use $permission;
}
答案 1 :(得分:0)
hasPermission
处于当前状态,该功能要求已获取模型才能正常工作,因此实际上不能用作查询。
不过,您可以尝试用SQL编写逻辑并在whereHas
中使用它:
Items::where('sell_price','>',0)->whereHas('user', function ($query) {
$query->join('permissions', \DB::raw('users.group|(permissions.id-1)'), '!=', '0')
->where('permission.name', 'SellItems');
});
希望这将获得与具有销售许可权的用户相关联的所有商品。