【问题标题】:Get all posts with only the author's name获取仅包含作者姓名的所有帖子
【发布时间】:2020-05-31 02:13:50
【问题描述】:

我已经在我的 User 和 Post 模型之间建立了一种雄辩的关系,并且在迁移中,唯一指向 Post 作者的是他的 ID。 我正在构建一个 VueJS Spa 前端,我想知道如何获取所有帖子,包括但仅限于作者 ID 和姓名+姓氏。

我听说过数据库查询生成器,但我想远离它。

目前,我正在使用$posts = Post::all(); 获取所有内容,这是回复:

    {
      "id": 3,
      "author": 1,
      "subject": "Post subject",
      "content": "The post content!!!!",
      "created_at": "2020-05-31T02:08:53.000000Z",
      "updated_at": "2020-05-31T02:08:53.000000Z"
    }

如您所见,“作者”字段指向用户 ID。由于安全原因和不必要的原因,我不想获取整个用户信息。

后模型关系:

public function user() {
    return $this->belongsTo('App\User')->select(array('id','name'));
}

用户模型关系:

public function posts() {
    return $this->hasMany('App\Post');
}

我也试过: Post::with('user:id,name,lastName')->get() 但用户返回 null。

【问题讨论】:

标签: laravel vue.js axios


【解决方案1】:

正如@porloscerrosΨ 所说,您应该指定第二个参数是外键,而且我相信您也应该在查询中选择author

你的关系

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

查询

Post::with('user:id,author,name,lastName')->get()

【讨论】:

  • 谢谢你们!这行得通。我完全迷失了几个小时,并认为 Laravel 会使用迁移中的外键。不知道它们是两个不同的东西。并且还需要添加主表 ID——在我的例子中是 users.id。不需要作者,因为它是帖子表列并且已经存在。
猜你喜欢
  • 2020-03-16
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多