关于laravel的Groupby

时间:2017-07-28 15:28:30

标签: php laravel model

嘿,我有三张这样的桌子

--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()

我的错误在哪里?

1 个答案:

答案 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)