2017-07-28 98 views
0

嘿,我有三個表這樣GROUPBY的關係laravel

--table plan-- 
id 
name 
.... 

----table letter--- 
id 
plan_id 
.... 

---table person---- 
id 
plan_id 
name 
..... 

型號我有:

---Model plan--- 
class plan extends Model 
{ 
    protected $table = 'plan'; 
    public function letter(){ 
     return $this->hasOne('App\letter'); 
    } 
    public function person(){ 
     return $this->hasMany('App\person'); 
    } 
} 
--Model person-- 
class person extends Model 
{ 
    public function plan(){ 
     return $this->belongsTo('App\plan'); 
    } 
} 

--Model letter-- 
class letter extends Model 
{ 
    public function plan(){ 
     return $this->belongsTo('App\plan'); 
    } 
} 

而且在控制我寫這樣的代碼:

$letter = letter::find($id) // $id from url parameter and it's work 
return view('letter',['letter' => $letter]); 

羅在查看我想從信件模型acces人名稱作爲截然不同的,所以我寫這樣的代碼

{{ @foreach ($letter->plan()->person()->groupBy('name')->get) as $person }} 

,但它返回的錯誤是這樣的: 調用未定義的方法照亮\數據庫\查詢\生成器::人()

哪裏是我的錯(S)?

回答

0

$letter->plan()$letter->plan之間的差異。如果您將它稱爲方法,則Laravel將返回查詢生成器。如果你稱它爲一個屬性,Laravel將從該關係中返回模型。

所以你試圖在查詢生成器上調用你的模型,這是一個不存在的方法,並創建錯誤。這將解決您的問題:

$letter->plan->person()->groupBy('name')->get()

在你的控制器,你可以這樣做:

$letter = letter::find($id) // $id from url parameter and it's work 
$persons = $letter->plan->person()->groupBy('name')->get(); 

return view('letter', compact('letter', 'persons')); 

而在你的看法:

@foreach($persons as $person) 
+1

此外,它是更好地渴望裝載計劃和人'$ letter = letter :: with('plan.person') - > find($ id)'+你的意思是'return view('letter',['persons'=> $ persons]);' – Maraboc

+0

好了這個問題是固定的,但在那裏顯示另一個公關oblem:語法錯誤或訪問衝突:1055'mydb.person.id'不在GROUP BY –

+0

nah現在一切正常,只是配置錯誤,謝謝 –