我想知道是否可以将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
。
我想检查用户是否拥有包含subject
和action
的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],
]);
我该怎么做?
答案 0 :(得分:2)
这应该有效:
$user->perms->contains(function ($val, $key) use ($subject, $action) {
return $val->subject == $subject && $val->action == $action;
});