php - Groupby on relation laravel -
hey have 3 table this
--table plan-- id name .... ----table letter--- id plan_id .... ---table person---- id plan_id name ..... model have :
---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'); } } and in controller write code :
$letter = letter::find($id) // $id url parameter , it's work return view('letter',['letter' => $letter]); nah in view wanna acces person name letter model distinct , write code this
{{ @foreach ($letter->plan()->person()->groupby('name')->get) $person }} but return error : call undefined method illuminate\database\query\builder::person()
where mistake(s)?
there difference between $letter->plan() , $letter->plan. if call method, laravel return query builder. if call attribute laravel return model relation.
so you're trying call model on query builder, method doesn't exists , creates error. fix problem:
$letter->plan->person()->groupby('name')->get()
in controller can do:
$letter = letter::find($id) // $id url parameter , it's work $persons = $letter->plan->person()->groupby('name')->get(); return view('letter', compact('letter', 'persons')); and in view:
@foreach($persons $person)
Comments
Post a Comment