你如何查询孩子和父母在拉拉维尔雄辩



我想弄清楚如何查询以获取由当前用户或当前用户父级创建的结果。

我有两个桌子usersworkouts.两个表都有一个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);
}

对于这个例子,我可能不会使用雄辩的关系,因为它可以是用户id,也可以是他们的created_by值。

相反,我会将用户模型上的方法更改为:

public function createdWorkouts()
{
return Workout::where('created_by', $this->id)->orWhere('created_by', $this->created_by)->get();
}

然后,您可以执行$user->createdWorkouts()此操作将返回由用户创建或由创建用户的用户创建的所有锻炼的集合。

由于它是一个集合,因此您可以访问集合上的所有其他方法,例如find

最新更新