php – 如何在Laravel 5中加入模型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何在Laravel 5中加入模型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2997字,纯文字阅读大概需要5分钟。
内容图文
![php – 如何在Laravel 5中加入模型?](/upload/InfoBanner/zyjiaocheng/818/d4b429ffbb5e4a478ac95bc632c5c708.jpg)
我有三个表,这样的结构(它们在MySQL数据库中)连接到我的Laravel 5 API和Eloquent模型:
# build_sets table
| id | title | description |
# parts table
| id | title | description | color |
# build_set_parts table
| id | build_set_id | part_id | amount | special_info |
目前我做这样的查询:
$buildSets = array();
foreach(BuildSet::with('parts')->get() as $buildSet) {
$temp = json_decode($buildSet);
$temp->parts = $buildSet->parts;
$buildSets[] = $temp;
}
return $buildSets;
我的模型看起来像这样:
class BuildSet extends Model
{
protected $table = 'build_sets';
protected $hidden = ['created_at', 'updated_at'];
public function parts()
{
return $this->hasMany('App\Models\BuildSetPart');
}
}
class Part extends Model
{
protected $table = 'parts';
protected $hidden = ['id', 'created_at', 'updated_at'];
public function buildSets()
{
return $this->hasMany('App\Models\BuildSet');
}
}
class BuildSetPart extends Model
{
protected $table = 'build_set_parts';
protected $hidden = ['id', 'build_set_id', 'part_id', 'created_at', 'updated_at'];
public function buildSet()
{
return $this->belongsTo('App\Models\BuildSet');
}
public function part()
{
return $this->belongsTo('App\Models\Part');
}
}
我得到这样的结果(JSON响应):
[
{
"id": 1,
"title": "Build set 1",
"description": "This is a small build set.",
"parts": [
{
"amount": 150,
"special_info": ""
},
{
"amount": 400,
"special_info": "Extra strong"
},
{
"amount": 25,
"special_info": ""
}
]
},
{
"id": 2,
"title": "Build set 2",
"description": "This is a medium build set.",
"parts": [
{
"amount": 150,
"special_info": ""
},
{
"amount": 400,
"special_info": "Extra strong"
},
{
"amount": 25,
"special_info": ""
},
{
"amount": 25,
"special_info": ""
},
{
"amount": 25,
"special_info": ""
}
]
}
]
正如您所看到的,我在构建集中包含的“parts”数组中缺少标题,描述和颜色.
所以我的问题是,如何将标题和颜色添加到我的回复中?我可以通过使用Eloquent模型来做到这一点,还是我必须创建自己的数据库查询,然后获取所有构建集,然后迭代它们并获取所有部件并构建集合部件,然后合并该结果并将其添加到构建集.
任何人都有一个很好的解决方案,它会给我在parts数组中的项目格式如下:
[
{
"title": "Part 1",
"color": "Red",
"amount": 25,
"special_info": ""
},
{
"title": "Part 2",
"color": "Green",
"amount": 75,
"special_info": ""
}
]
解决方法:
从你的模型中,你在BuildSet和Part之间有多对多的关系.
因此,在BuildSet中,您可以使用hasManyThrough关系.
模型构建集
public function parts()
{
return $this->hasManyThrough('App\Models\Part', 'App\Models\BuildSetPart');
}
来源:http://laravel.com/docs/5.0/eloquent#relationships
无论如何,如果你想保持BuildSet和BuildSetPart之间的关系.
我建议你改用它.
public function buildSetPart()
{
return $this->hasMany('App\Models\BuildSetPart');
}
注意:现在,你在BuildSet模型中得到了parts()和buildSetPart()
创建关系后,您可以替换代码
$buildSets = array();
foreach(BuildSet::with('parts')->get() as $buildSet) {
$temp = json_decode($buildSet);
$temp->parts = $buildSet->parts;
$buildSets[] = $temp;
}
return $buildSets;
同
return BuildSet::with('parts')->get();
或者,如果您想要JSON格式的输出
return BuildSet::with('parts')->toJson();
来源:http://laravel.com/docs/5.0/eloquent#collections
内容总结
以上是互联网集市为您收集整理的php – 如何在Laravel 5中加入模型?全部内容,希望文章能够帮你解决php – 如何在Laravel 5中加入模型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。