这个问题听起来可能有点混乱,但我不知道如何用一句话来更好地解释它。
这基本上描述了问题所在:
我有一个用户表,可以包含两种类型的用户。我知道怎样才能按角色区分。但问题是,角色1(主编)的用户与角色2(审阅者)的用户具有不同的属性。
我的想法是创建一个名为“reviewer_attributes”和“editor_in_chief_attributes”的表,并创建与此表的一对一关系来保存用户表的属性。
也许你有更好的主意,那也太好了。但是对于这个场景,我想知道是否可以调用数据库,并从另一个表中获取这些用户的属性作为用户对象的属性。
当使用关系数据库调用时,laravel会给出如下信息:

user {
   id: 1,
   name: "Name",
   reviewer_attributes: {
      attribute_1: 'attribute_1',
      attribute_2: 'attribute_2',
      attribute_3: 'attribute_3',
   }
}

但这就是我想要反对的东西看起来像:
user {
   id: 1,
   name: "Name",
   attribute_1: 'attribute_1',
   attribute_2: 'attribute_2',
   attribute_3: 'attribute_3',
}

我想通过一个数据库调用来实现这一点,而不是在调用后设置属性。
我觉得这个话题很有趣,希望你能帮忙!

最佳答案

如果我解决了你的问题,你可以这样称呼我:

DB::table('users')
    ->join('reviewer_attributes', 'users.id', '=', 'reviewer_attributes.user_id')
    ->find($id);

您可以添加select以获取每个表的特定属性:
DB::table('users')
    ->join('reviewer_attributes', 'users.id', '=', 'reviewer_attributes.user_id')
    ->select('users.id', 'users.name', 'reviewer_attributes.*')
    ->find($id);

更新:您还可以使用collections重新构造由雄辩返回的结果:
$result = User::with('reviewerAttributes')->find($id);

$result = $result->get('reviewer_attributes')
                 ->merge($result->forget('reviewer_attributes')->all())
                 ->all();

10-04 10:57
查看更多