具有关系

时间:2017-09-20 07:27:24

标签: php laravel eloquent

我有两个关系公司和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);

3 个答案:

答案 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的单一模型。

由于DamageReportCompany的关系设置正确,->company关系将带回关联的公司模型。

答案 2 :(得分:0)

如果关系是一对多,请使用belongsTohasMany方法。

  

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;