2017-07-28 76 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现在一切正常,只是配置错误,谢谢 –