【发布时间】:2016-05-19 01:48:28
【问题描述】:
我有两个模型,它们通过数据透视表连接,User 和 Task。
我有一个user_id 和一个task_id。
检查这种用户和任务组合是否存在记录的最简洁方法是什么?
【问题讨论】:
标签: php laravel eloquent pivot-table
我有两个模型,它们通过数据透视表连接,User 和 Task。
我有一个user_id 和一个task_id。
检查这种用户和任务组合是否存在记录的最简洁方法是什么?
【问题讨论】:
标签: php laravel eloquent pivot-table
根据您的情况,您有几个选择。
如果您已经有一个User 实例,并且您想查看它是否有具有特定id 的任务,您可以这样做:
$user = User::find(1);
$hasTask = $user->tasks()->where('id', $taskId)->exists();
如果您有 Task 实例并想要检查用户,则可以撤消此操作:
$task = Task::find(1);
$hasUser = $task->users()->where('id', $userId)->exists();
如果您只有 id,没有每个的实例,您可以执行以下操作:
$hasPivot = User::where('id', $userId)->whereHas('tasks', function ($q) use ($taskId) {
$q->where('id', $taskId);
})
->exists();
【讨论】:
你也可以试试这个,这在 Laravel 5.7 中工作
$user = User::find(1);
$hasTask = $user->tasks->contains($taskId);
但更好的方法是
$hasTask = $user->tasks()->where('tasks.id', $taskId)->exists();
【讨论】:
你会搜索这个吗?
$users = User::has('task')->get();
【讨论】:
对我来说最容易阅读的是:
$user->tasks()->exists();
【讨论】:
您可以使用下面的代码:
$user = User::find(1);
$hasTask = $user->tasks()->where('task_id', $taskId)->exists();
【讨论】: