我有一个项目模型和一个用户模型。 在用户模型中有一个检查用户是否有权限的函数:
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');
}
}
最佳答案
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');
});
这将有望获得与具有销售权限的用户关联的所有项目。
关于mysql - Laravel - 根据另一个模型的功能过滤模型中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55205002/