mysql - Laravel - 根据另一个模型的功能过滤模型中的行

标签 mysql laravel model

我有一个项目模型和一个用户模型。 在用户模型中有一个检查用户是否有权限的函数:

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/

相关文章:

Mysql "ON UPDATE"约束删除我的行

php - CodeIgniter/JQuery/MySQL 日期时间

MySQL AVG 错误结果与 ELSE 0

mysql - 如何在Wamp服务器上运行Laravel

sql - 在 Oracle SQL 中处理循环数据

mysql - 递归mysql选择?

php - 如何使用 laravel 将一个表的内容传输到另一个数据库表

从 guest 将文件添加到 VMware 主机时出现 PHP 语法错误

ruby-on-rails - Rails 验证最佳实践

python - 如何建模以有效地查询多列?