Laravel Eloquent Model Parent/Child Relationship with itself

Unconditional love has a lot to do with a parents upbringing, or else you gotta tell them who their Daddy is! This relationship model helped me bring my SQL queries in my web page from over a 100 down to 6, it might help some people out:
note: the dependency_id column will contain the ID of the parent, you can modify this to have many to many relations using pivot tables!
<?php
class Person extends \Eloquent {
protected $fillable = [];
var $mom, $kids;
function __construct() {
if($this->dependency_id<>0) {
$this->mother->with('mother');
}
}
public function children() {
$children = $this->hasMany('Person','dependency_id');
foreach($children as $child) {
$child->mom = $this;
}
return $children;
}
public function mother() {
$mother = $this->belongsTo('Person','dependency_id');
if(isset($mother->kids)) {
$mother->kids->merge($mother);
}
return $mother;
}
public function canonical_url($type='soft') {
if($type=='hard') {
return
Config::get('app.url').
(isset($this->mother->mother->slug)?$this->mother->mother->slug.'/':'').
(isset($this->mother->slug)?$this->mother->slug.'/':'').
$this->slug;
}else {
return
Config::get('app.url').
(isset($this->mom->mom->slug)?$this->mom->mom->slug.'/':'').
(isset($this->mom->slug)?$this->mom->slug.'/':'').
$this->slug;
}
}
}
Now you can do things like this:
<!--?php $page = Page::with('children','children.children')--->where('slug','=', $page_slug)->first();
?>
Then in your view file:
<code><ul class="nav navbar-nav">
@foreach($navigation as $parent_item)
<li class="@if(count($parent_item->children)) dropdown @endif @if($parent_item->canonical_url()==Request::path()) active @endif" >
<a href="/{{$parent_item->slug}}">
{{$parent_item->name}}
</a>
@if(count($parent_item->children))
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
@foreach($parent_item->children as $child_item)
<li >
<a href="{{$child_item->canonical_url()}}">
{{$child_item->name}}
<br>
<span>{{$child_item->description}}</span>
</a>
@if(count($child_item->children))
<ul class="dropdown-menu">
<li data-bird='{{$child_item->summary}}'>
<a href="{{$child_item->canonical_url()}}">
{{$child_item->title}} Overview
</a>
</li>
@foreach($child_item->children as $grandchild_item)
<li >
<a href="{{$grandchild_item->canonical_url()}}">
{{$grandchild_item->name}}
<br>
<span>{{$grandchild_item->description}}</span>
</a>
</li>
@endforeach
</ul>
@endif
</li>
@endforeach
</ul>
@endif
</li>
@endforeach
</ul></code>





















































