Laravel | Eloquent填充外国数据

时间:2017-09-15 21:53:26

标签: php mysql json laravel eloquent

我有一个数据库,其中包含新闻和新闻类别表。

我有一个类别1的新闻,它链接到类别表的外键,其中类别值等于类别表中的id。

我在尝试将结果作为JSON响应返回时,尝试创建一个获取类别名称而不是类别ID的控制器。

到目前为止,我在模型中有这个:

public function category()
{
    return $this->belongsTo(NewsCategories::class);
}

然后我在控制器内执行此操作:

public function index()
{
    $news = new News();
    $news = $news->category()->get();

    return response()->json(['data' => $news], 200);
}

但是返回的JSON响应是空的。我搜索了一些东西,但是没有真正发现有关获取类别表中标题的外国字段的任何有用的东西。

这是我得到的回复

{
  data: [ ]
}

1 个答案:

答案 0 :(得分:1)

第一个问题是,您认为新News个实例已关联类别:

$news = new News();

这只会产生一个空的模型实例;它还没有数据库表示。尝试通过填充的模型实例获取类别:

$news = News::first();

// Or:
$news = News::find(1);

并重试JSON响应。

第二个问题是,通过致电$news->category()->get(),您实际上是querying the relation。如果您只需要访问标题,请尝试$news->category->title,它会加载相关的类别记录并为您访问title字段。

关于您的评论,请阅读eager/lazy loading