vendredi 7 mars 2014

Laravel eloquent query with several layers of model relationships


Vote count:

0




I'm having some trouble doing eloquent database queries in Laravel. I have searched around a lot, but I don't know exactly what to search for to get my answer.


I'm making a web page in Laravel for kindergardens, and I need to get all children connected to a kindergarden in a single collection/array. The problem is that children are only connected to the kindergarden through their group(s). So the query needs to be able to get all children that are part of any group connected to the kindergarden.


The model relationships are like this:

A kindergarden has many groups, and groups belong to a kindergarden.

A group has many children, and children have many groups.


The best I've managed to do so far is this:



public function getChildren(){

$kid = Session::get('kid');

$k = Kindergarden::find($kid);
$groups = $k->group;

$children;

foreach($groups as $g){
$children = $children->merge($g->children);
}

$children = $children->toArray();

return Response::json($children);
}


But this makes duplicates when children are in several groups in the same kindergarden. It also seems like an unnecessary complicated way to do it.


For a while I also tried to get the hasManyThrough-relationship to work, but it doesn't seem to work when there'a a many-to-many relationship and a pivot table involved.


I tried with this:



class Kindergarden extends Eloquent {
public function children()
{
return $this->hasManyThrough('Children', 'Group', 'kid', 'gid');
}
}


and then tried to call



Kindergarden::find(1)->children;


I'm sure there is a really simple way to do this, but I'm totally new to laravel and not really that great at sql, so I haven't been able to find anything to help me figure this out.



asked 49 secs ago






Aucun commentaire:

Enregistrer un commentaire