我的父母有很多孩子:
class Parent extends Model
{
public function children()
{
return $this->hasMany(Child::class);
}
}
class Child extends Model
{
public function parent()
{
return $this->belongsTo(Parent::class);
}
}
子模型只有2个属性:parent_id
和value
。我想在将父级转换为json时“拔出”值,而不是
{
"name": "name1",
"children": [
{
"value": "value1"
},
{
"value": "value2"
}
]
}
我得到了
{
"name": "name1",
"children": [
"value1",
"value2"
]
}
我知道可以通过声明新的getValuesAttribute
并将protected $appends = ['values'];
添加到Parent模型来完成,但我想这样做而不重命名属性(我希望值在{{1}数组而不是children
数组)。如果我使用与关系相同的名称定义mutator属性,则显然会导致错误。
我该怎么做?
答案 0 :(得分:0)
一种方法是使用Fractal将数据表示与模型分开。如果定义分形变换器以匹配所需的结构,则可以将数据传递到控制器中的变换器,并在不触及模型的情况下更改JSON的结构。
编辑:Laravel 5.5引入了resources,这是Fractal的一个更简单的替代方案,但基本上做同样的事情。
答案 1 :(得分:0)
如果你会这样做会怎么样:
$ scrapy shell --nolog
>>> from scrapy import Request
>>> req = Request("https://www.magzter.com/magazines/listAllIssues/146/12", headers = {"X-Requested-With" : "XMLHttpRequest"})
>>> fetch(req)
>>> response.body
b'\r\n\t<div class="mag-wrap">\r\n \t<h3></h3>\r\n \t<ul class="mag-list main-magz">\r\n <li>\r\n <div class="cover-wrap"><a href="https://www.magzter.com/IN/EFY-Enterprises-Pvt-Ltd/Electronics-For-You/Science/183025" onclick="ga(
答案 2 :(得分:0)
您可以覆盖jsonSerialize
型号中的Parent
功能:
public function jsonSerialize()
{
return [
'name' => $this->name,
'children' => $this->children->pluck('value')->toArray(),
]
}
这样做,您将在调用toJson()
方法或将模型作为json响应返回时(内部调用toJson()
)收到正确的输出。