如何解决批量显示关系数据
我正在编写一个API,并且有与之相关的主题和评论。我的愿望是显示所有主题,同时还显示属于该主题的评论。我使用hasMany选项建立了关系,但是我无法显示数据。
评论表
发布模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Posts extends Model
{
protected $table = 'posts';
protected $fillable = [
'post_id','user_id'
];
public function user(){
return $this->belongsTo('App\Models\Users');
}
public function comment()
{
return $this->hasMany('App\Models\Comments','post_id','id');
}
}
评论模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Comments extends Model
{
protected $fillable = [
'user_id','description'
];
public function user()
{
return $this->belongsTo('App\Models\Users','user_id','id');
}
public function post()
{
return $this->belongsTo('App\Models\Posts','id');
}
}
例如,当我拍摄下面的所有主题时,我想要带有用户ID的评论。我该如何自定义?
{
"id": 1,"user_id": 10,"image": "https://lorempixel.com/800/400/cats/WhaleDevops/?43757","description": "Et quia enim distinctio non qui laudantium voluptatem. Cumque minus cum pariatur necessitatibus. Repellat qui provident voluptatum ut. Et sapiente eaque eum ut. Repudiandae eveniet a harum ea totam consectetur. Facere facilis sunt et consequuntur sapiente. A aspernatur placeat tenetur et. Omnis quasi sunt nostrum et velit sint quia. Velit temporibus ut aut ea in repudiandae.","created_at": "1999-04-11T17:37:42.000000Z","updated_at": "2020-08-08T10:41:28.000000Z"
},{
"id": 2,"user_id": 2,"image": "https://lorempixel.com/800/400/cats/WhaleDevops/?53905","description": "Quasi ab recusandae molestiae pariatur et ut. Harum dolorum illo aspernatur fugit sequi aut. Modi quasi voluptas ad maxime ducimus quia molestiae maiores. Pariatur quam quam officia expedita. Alias quas aliquid et.","created_at": "1972-03-17T04:01:26.000000Z",
解决方法
您将必须阅读Laravel Resources
构建API时,您可能需要一个转换层,该转换层位于Eloquent模型和实际返回给应用程序用户的JSON响应之间。 Laravel的资源类使您可以表达而轻松地将模型和模型集合转换为JSON。
文档写得很好,易于阅读。它应该具有您需要的一切。
您将需要阅读Writing Resources一章,其中说明了如何处理关系。
,您需要进行两项更改。
1)从发布表中删除post_id并将其放置在评论表中。
2)编写查询
Post::with('comment','user')->get();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。