2016-11-08 40 views
0
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)使用($公司){$ Q->在哪裏( 'COMPANY_ID' ,$公司 - > ID);}) - >獲得();Laravel 5.3關係返回錯誤的一個

但它返回公司,而不是設置。我究竟做錯了什麼? 謝謝!

編輯所有模型, $ companies = Company :: with('company_settings') - > get();也返回所有公司

謝謝!

+0

那是說你'很多人Many'關係,顯示使用更多的代碼,請。至少兩種型號。 –

回答

2

然後得到的設置,你可以這樣做:

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

然後訪問的第一家公司的設置:

$companies ->first()->company_settings; 

因爲這將返回一個集合中的所有的收集方法提供給您:

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

要循環通過gh他們你可以這樣做:

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

公司設置有多對多的關係,所以我需要belongsToMany – user3844579

+0

'whereHas'通過關係過濾,以獲取公司的設置,您將執行'$ companies = Company :: with('company_settings') - > get(); '這將返回一批公司。你可以通過循環訪問它們的設置,或者通過一個例子來獲得第一個將是'$ companies-> first() - > company_settings' –

0

你不能在這個查詢中建立與settings的關係。 whereHas()的工作原理與has()相同,但允許您爲相關模型指定其他過濾器進行檢查。

試試這個:

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