Laravel 5.3关系returns错了一个

Laravel 5.3 relationship returns wrong one

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');
}

}

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

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

编辑了所有模型, $companies = Company::with('company_settings')->get();还有returns所有公司

谢谢!

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

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

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

$companies ->first()->company_settings;

从这个returns集合开始,所有的收集方法都对你可用:

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

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

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

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

试试这个:

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