Laravel 5.3关系返回错误

时间:2016-11-08 21:39:15

标签: php laravel relation

class Company extends Model
{
 public function company_settings()
{
    return $this->belongsToMany('CompanySetting');
}

}

class SettingsGroup extends Model
{
public $table = 'settings_groups';

public function comapanySettings() {

    return $this->hasMany('CompanySetting');
}
}

 class CompanySetting extends Model
{
public function groups () {

    return $this->belongsToMany('SettingsGroups');

}

public function company_settings()
{
    return $this->belongsToMany('Company');
}

}

我想获取公司的设置: 公司:: whereHas('company_settings',函数($ q)使用($ company){$ q-> where('company_id',$ company-> id);}) - > get();

但它返回公司,而不是设置。我究竟做错了什么? 谢谢!

所有模特编辑, $ companies = Company :: with('company_settings') - > get();也返回所有公司

谢谢!

2 个答案:

答案 0 :(得分:2)

然后获取您可以执行的设置:

$companies = Company::with('settings')->get();

然后访问第一家公司的设置:

$companies ->first()->company_settings;

由于这会返回一个集合,因此您可以使用所有集合方法:

https://laravel.com/docs/5.3/collections

要遍历它们,您可以这样做:

$companies->each(function($company) {
    $company->company_settings;
    // Your logic here
});

答案 1 :(得分:0)

您无法在此查询中与settings建立关系。 whereHas()与has()基本相同,但允许您为要检查的相关模型指定其他过滤器。

试试这个:

  Company::with('company_settings')
        ->whereHas('company_settings', function ($q) use ($company)
        {
              $q->where('company_id',$company->id);
        })->get();