【发布时间】:2020-05-08 10:48:47
【问题描述】:
我有几个看起来像这样的表:
1) 文章
- 身份证
- 姓名
2) article_options
- 身份证
- article_id
- option_id
3) 选项
id
姓名
一篇文章可以没有、一个或多个选项,我想在 RestAPI 中返回一个如下所示的 JSON 结构:
[{
"id": 1,
"name": "Article1",
"options": [10]
},
{
"id": 2,
"name": "Article2",
"options": [3, 10]
},
{
"id": 3,
"name": "Article3",
"options": []
}]
其中 3 和 10 将是选项 ID。
我尝试了一些解决方案,但都没有奏效。这是我目前拥有的:
文章型号:
class Article extends Model
{
# protected $with = ['Article_Option'];
public function options()
{
return $this->hasMany('App\Article_Option');
}
}
文章管理员:
class ArticleController extends Controller
{
public function index()
{
$articles = Article::all();
return response()->json(
$articles
, 200);
}
}
我只是不明白应该如何配置模型和控制器来实现这一点。
请帮忙。
谢谢 哥比
[更新]
感谢隐藏的帮助。通过一些修改,我让它按照我想要的方式工作。这是所有代码...
文章型号:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
public function options()
{
return $this->belongsToMany('App\Option');
}
}
文章控制器:
namespace App\Http\Controllers;
use App\Article;
use App\Http\Resources\Article as ArticleResource;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function index()
{
$articles = ArticleResource::collection(Article::all());
return response()->json ($articles, 200);
}
}
和资源:
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class Article extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'options' => $this->options->pluck('id')->all()
];
}
}
【问题讨论】: