【问题标题】:nested data structure in Laravel eloquentLaravel eloquent 中的嵌套数据结构
【发布时间】:2020-12-19 06:18:58
【问题描述】:

我在 Laravel / MySQL 中有一个 users_table 和 user_tweets_table。我想以这种结构返回响应数据:

[
{
id:1,
name:'Johne',
tweets:[
{
id:1,
content:"something"
},
{
id:2,
content"something else"
}
]
},
{
id:2,
name:'Jennifer',
tweets:[
{
id:1,
content:"something"
},
{
id:2,
content"something else"
}
]
},
]

我试试这个,但效果不好:

  $list = User::all();
    $list = $list->
    skip($skip)->
    take($take);
    foreach ($list as $user)
    {

        $user['tweets']=UserTweet::where('user_id',$user['id'])->get();
    }
    return response(['message' => 'The list of users', 'data' => $list], 200);

如何使用 eloquent 和 innerjoin 做到这一点?

【问题讨论】:

  • 你尝试了什么?添加一些代码

标签: php mysql laravel eloquent


【解决方案1】:

您应该建立模型之间的关系...

在用户模型中:

  public function tweets()
    {
        return $this->hasMany(UserTweet::class, 'user_id');
    }

在 UserTweet 模型中:

public function user()
    {
        return $this->belongsTo(User::class,'user_id');
    }

现在你可以load你的亲戚:

$list = User::with('tweets')->all();

更多关于doc中的一对多关系

【讨论】:

  • 非常好,我还有一个问题:我想试试表名,例如从推文到 cmets。我该怎么做
  • 你可以在这里看到答案,非常好:stackoverflow.com/a/33889923/10573560
  • 不,如果要将推文返回的数据中的键重命名为 cmets,我不想真正更改表名!
  • 只需重命名关系... public function cmets() {.......} 然后 $list = User::with('cmets')->all();
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 2021-08-11
  • 2020-10-22
  • 2022-08-09
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多