【问题标题】:mysql LIKE condition in laravel eloquentlaravel eloquent 中的 mysql LIKE 条件
【发布时间】:2015-12-22 23:30:50
【问题描述】:

在我的数据库中,我以“二进制”格式存储用户权限,我有 3 个用户权限,管理员、经理、财务。论文由一个短的“二进制”字符串表示,

Admin - 100
Manager - 010
Finance - 001

现在角色是可以互换的,一个用户可以拥有多个角色,例如一个用户可以拥有财务和经理权限,像这样表示,“011”基本上1代表开启,0代表关闭。

我的问题是在我的 Laravel 关系中寻找数据,目前我正在做以下事情,以寻找经理。

public function managers() {
    return $this->belongsToMany('User')->wherePivot('role', '=', '010')->withPivot(['created_at' => 'created_at as joined', 'role' => 'role as role']);
}

现在显然,这仅适用于用户是经理而不是财务人员的情况。我想我可以使用 mysql 的 LIKE 来比较字符串的权限,但我可以努力寻找部分匹配?

例如,我如何检查三个中的第二个是 0 还是 1?简单的规则是,

第一个数字 = 1 然后是所有者权限, 第二个数字 = 1 然后是管理员权限, 第三个数字 = 1 然后是财务许可

但可以有任意数量的组合。

【问题讨论】:

  • 没有 SUBST 或 CHARAT 函数可以用于此目的吗?
  • wherePivot('role', 'LIKE', '_1_')
  • 似乎您可以通过创建权限表并在用户和权限之间建立多对多关系来避免此问题。
  • 我确实考虑过,但我会拥有Organisations n:n UsersUsers n:n Permission,这意味着我需要旋转一个枢轴来获得我需要的功能?
  • 是的,我想会是这样。我不记得我以前是否尝试过,但我认为它应该可以工作。

标签: php mysql laravel eloquent


【解决方案1】:

您可以使用substring 来执行此操作。像这样:

$this->belongsToMany('User')
     ->wherePivot(DB::Raw('SUBSTRING(role, 2, 1)'), '=', '1');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 2019-12-28
    • 2022-07-06
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多