我有两个关系公司和DamageReport的模型。
一个DamageReport总是通过关键的company_id链接到公司。
因此,DamageReport中的company_id等于公司中的id。
很简单吧?现在我的目标是在知道DamageReport的id时查询公司。
例如
我有一行DamageReport表:
id company_id
6 1
ID公司的记录是:
id name
1 Company 1
所以在我的控制器中我有DamageReport id(6),需要查询id为1的公司。
我在我的模特中建立了这样的关系
公司型号:
/**
* The Damage Reprots that belong to the Company.
*/
public function damageReports()
{
return $this->belongsToMany('App\DamageReport');
}
DamageReport模型:
/**
* The company of a damagereport
*
*/
public function company()
{
return $this->belongsTo('App\Company');
}
现在在我的控制器中我试过这样的事情,但我老实说没有任何线索
$company = new Company;
$company = $company->company($damageReportId);
dd($company);
答案 0 :(得分:2)
你的关系错了。
应该是
Company model:
/**
* The Damage Reprots that belong to the Company.
*/
public function damageReports()
{
return $this->hasMany('App\DamageReport');
}
DamageReport model:
/**
* The company of a damagereport
*
*/
public function company()
{
return $this->belongsTo('App\Company');
}
// In your controller
public function index()
{
$damageReportId = 1;
$company = Company::whereHas('damageReports', function ($q) use($damageReportId) {
$q->where('id', $damageReportId);
})->first();
dd($company);
}
// Or
public function index()
{
$damageReportId = 1;
$company = DamageReport::find($damageReportId)->company;
dd($company);
}
答案 1 :(得分:1)
您应该使用:
$company = DamageReport::find($damageReportId)->company;
<强>解释强>
DamageReport
是你所知道的,因此find($id)
方法会带回你拥有$id
的单一模型。
由于DamageReport
与Company
的关系设置正确,->company
关系将带回关联的公司模型。
答案 2 :(得分:0)
如果关系是一对多,请使用belongsTo
和hasMany
方法。
https://laravel.com/docs/5.5/eloquent-relationships#one-to-many
因此,您的DamageReport
模型是正确的,并且在您的Company
模型中
/**
* The Damage Reprots that belong to the Company.
*/
public function damageReports()
{
return $this->hasMany('App\DamageReport');
}
然后在你的控制器中,@ Skrrp的答案是对的,
$company = DamageReport::find($damageReportId)->company;