web-dev-qa-db-fra.com

Laravel: rechercher s'il existe un enregistrement de tableau croisé dynamique

J'ai deux modèles qui sont joints par un tableau croisé dynamique, User et Task.

J'ai un user_id et un task_id.

Quelle est la meilleure façon de vérifier s'il existe un enregistrement pour cette combinaison d'utilisateur et de tâche?

20
datavoredan

Vous avez quelques options en fonction de votre situation.

Si vous avez déjà une instance User et que vous voulez voir si elle a une tâche avec un certain id, vous pouvez faire:

$user = User::find(1);
$hasTask = $user->tasks()->where('id', $taskId)->exists();

Vous pouvez inverser cela si vous avez l'instance Task et que vous souhaitez rechercher un utilisateur:

$task = Task::find(1);
$hasUser = $task->users()->where('id', $userId)->exists();

Si vous n'avez que les identifiants, sans une instance de chacun, vous pouvez effectuer les opérations suivantes:

$hasPivot = User::where('id', $userId)->whereHas('tasks', function ($q) use ($taskId) {
        $q->where('id', $taskId);
    })
    ->exists();
35
patricus

Vous pouvez également essayer ceci, cela fonctionne dans Laravel 5.7

$user = User::find(1);
$hasTask = $user->tasks->contains($taskId);
4
Prafulla Kumar Sahu

peut-être cherchez-vous cela?

$users = User::has('task')->get();
4
Yurich