Php Laravel雄辩的关系查询-获取数据和关系属性
我需要帮助检索有说服力的关系数据 假设我有这样一种雄辩的关系: 模型与关系 公司Php Laravel雄辩的关系查询-获取数据和关系属性,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我需要帮助检索有说服力的关系数据 假设我有这样一种雄辩的关系: 模型与关系 公司 属性:(id、代码、名称、状态) 关系: public function sites(){ $this->hasMany(\App\Models\Site::class); } public function company(){ $this->belongsTo(\App\Models\Company::class); } 站点 属性:(id、公司id、代码、名称、状态) 关系: p
属性:(id、代码、名称、状态)
关系:
public function sites(){
$this->hasMany(\App\Models\Site::class);
}
public function company(){
$this->belongsTo(\App\Models\Company::class);
}
站点属性:(id、公司id、代码、名称、状态)
关系:
public function sites(){
$this->hasMany(\App\Models\Site::class);
}
public function company(){
$this->belongsTo(\App\Models\Company::class);
}
我想找回什么 我希望检索所有站点数据及其公司名称,例如:
[
{
"id":7,
"company_id":1,
"company_name":"Company 1",
"code":"S001",
"name":"Site 001",
"status":"Active"
},
{
"id":8,
"company_id":1,
"company_name":"Company 1",
"code":"S002",
"name":"Site 002",
"status":"Active"
}
]
我已经试过了 1-我已经尝试过这种方法:
$sites = Site::with('company')->get();
dd($sites->toJson());
但它给了我:
[
{
"id":7,
"company_id":1,
"code":"S001",
"name":"Site 001",
"status":"Active",
"company":{
"id":1,
"code":"C001",
"name":"Company 1",
"status":"Active"
}
},
{
"id":8,
"company_id":1,
"code":"S002",
"name":"Site 002",
"status":"Active",
"company":{
"id":1,
"code":"C001",
"name":"Company 1",
"status":"Active"
}
},
]
2-目前,我使用这种方法获取数据。但我认为还有另一种最好的方法,不用循环整个数据,只需获得一些特定的关系属性:$sites = Site::get();
foreach ($sites as $site){
$site['company_name'] = $site->company()->first()->name;
}
dd($sites->toJson());
我的问题
实际上,如何获得我想要的数据是最好的方法?是否可以不使用循环而只使用雄辩的关系查询?多谢各位
您最好的选择是在
网站上创建一个模型:
public function getCompanyNameAttribute()
{
return optional($this->company)->name;
}
^optional()
helper使之成为这样,如果站点没有公司,则不会引发错误。根据您的数据库设置,您可能不需要它
然后,您可以将访问器添加到模型中的数组中,以便它在JSON转储中可见:
protected$appends=['company_name']代码>
我还建议您每次都向公司加载站点,就像您在第一个示例中所做的那样,以避免n+1
:
Site::with('company')->get()
此外,如果要隐藏公司
对象,可以在模型中使用