Laravel包含()多个值

时间:2017-05-13 19:48:13

标签: php laravel

我想知道是否可以将contains()用于多个值。

例如,假设我有以下perms表:

  TABLE `perms` (
  `id` int(11) NOT NULL,
  `subject` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `action` varchar(255) COLLATE utf8_unicode_ci NOT NULL
  )

示例行:

  INSERT INTO `perms` (`id`, `subject`, `action`) VALUES
  (1, 'Product', 'Create'),
  (2, 'Product', 'Read'),
  (3, 'Product', 'Update'),
  (4, 'Product', 'Delete');

我的用户与belongsToMany表格之间存在users_perms关系,用户可以拥有任意数量的perms

我想检查用户是否拥有包含subjectaction的perm。因此,我想检查一位用户是否拥有Create一个Product的烫发。

现在,只检查action

时,以下代码有效
  $action = 'Create';
  $user->perms->contains('action', $action); // true if they have ANY Create action perm

但是我也需要检查subject,因为仅仅检查action是不够的。所以我需要这样的东西:

  $subject = 'Product';
  $action = 'Create';
  $user->perms->contains([
    ['subject', $subject],
    ['action', $action],
  ]);

我该怎么做?

1 个答案:

答案 0 :(得分:2)

这应该有效:

$user->perms->contains(function ($val, $key) use ($subject, $action) {
    return $val->subject == $subject && $val->action == $action;
});