我想弄清楚如何查询以获取由当前用户或当前用户父级创建的结果。
我有两个表users
和workouts
。两个表都有一个created_by
列,该列存储创建该用户或锻炼记录的人的用户ID。
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`created_by` int(10) unsigned DEFAULT NULL,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `users_created_by_foreign` (`created_by`),
CONSTRAINT `users_created_by_foreign` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`)
);
CREATE TABLE `workouts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`created_by` int(10) unsigned NOT NULL,
`description` text COLLATE utf8_unicode_ci,
`name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `workouts_created_by_foreign` (`created_by`),
CONSTRAINT `workouts_created_by_foreign` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`)
);
在我的用户模型中,我具有返回用户创建的所有锻炼的功能。
public function createdWorkouts(): HasMany
{
return $this->hasMany(Workout::class, 'created_by');
}
我想弄清楚的是,如何查询使用ID查找锻炼,但仅适用于当前用户创建的锻炼或当前用户的创建者的锻炼。下面是我当前的路线逻辑,该逻辑仅返回当前用户创建的锻炼。
$user = User::find(1); // This would come from the JWT
if (!$workout = $user->createdWorkouts()->find($args[‘workout_id’])) {
return $response->withJson([], 404);
}
答案 0 :(得分:0)
在这种情况下,我可能不会使用雄辩的关系,因为它可能是用户id
或他们的created_by
值。
相反,我会将用户模型上的方法更改为:
public function createdWorkouts()
{
return Workout::where('created_by', $this->id)->orWhere('created_by', $this->created_by)->get();
}
然后,您可以执行$user->createdWorkouts()
,它将向您返回由用户创建或创建用户的用户创建的所有锻炼的集合。
由于它是一个集合,因此您可以访问集合上的所有其他方法,例如find
等