2017-05-13 2 views
0

Ich möchte wissen, ob es möglich ist, für mehrere Werte zu verwenden.Laravel enthält() für mehrere Werte

Zum Beispiel sagen wir, ich habe folgende perms Tabelle:

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 
) 

Beispiel Reihen:

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

Meine Benutzer haben eine belongsToMany Beziehung mit einem users_perms Tisch, wo ein Benutzer jede haben kann Anzahl der perms.

Ich möchte überprüfen, ob ein Benutzer eine Dauerwelle hat, die eine subject UND eine action enthält. Also, ich möchte überprüfen, ob ein Benutzer die Perm Create eine Product hat.

Momentan befindet sich der folgende Code funktioniert, wenn nur die action Überprüfung:

$action = 'Create'; 
    $user->perms->contains('action', $action); // true if they have ANY Create action perm 

Aber ich brauche diese auch zu den subject zu überprüfen, weil es nicht genug ist, der action nur zu überprüfen. Also brauche ich etwas wie:

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

Wie mache ich das?

Antwort

0

Dies sollte funktionieren:

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