嘿,我有三张这样的桌子
--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]);
Nah在视野中我想从字母模型中获取人名作为不同的,所以我写这样的代码
{{ @foreach ($letter->plan()->person()->groupBy('name')->get) as $person }}
但它会返回如下错误: 调用未定义的方法Illuminate \ Database \ Query \ Builder :: person()
我的错误在哪里?
答案 0 :(得分: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)