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?
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();
Vous pouvez également essayer ceci, cela fonctionne dans Laravel 5.7
$user = User::find(1);
$hasTask = $user->tasks->contains($taskId);
peut-être cherchez-vous cela?
$users = User::has('task')->get();