You already identified you relationships. Make a class for every entity (school, project, ...). Inside the classes define the relationships.
You submit the form to a controller method.
function method(){
$query = Project::with('area', 'school', 'country'); //names of eager loaded relationships
$name = Input::get('name');
if($name && !empty($name)){
$query = $query->where('name', 'LIKE', '$'.$name.'$');// where clause for name column
}
$school_id = Input::get('school_id');
if($school_id)
$query = $query->where('school_id', '=', $school_id); //foreign key must have the value $school_id
$country_id = Input::get('country_id');
if($country_id)
$query = $query->whereHas('countries', function($countryQuery) use ($country_id){
$countryQuery->where('id', '=', $country_id); //id is the primary key in countries
}); //select only those project wich have at least one country fulfilling the $countryQuery formed in the passed closure.
$area_id = Input::get('area_id');
if($area_id)
$query = $query->whereHas('areas', function($areaQuery) use ($area_id){
$areaQuery->where('id', '=', $area_id); //is is the primary key in areas
});
$result = $query->get();// make the query and load the data
//result is a collection
return View::make('...')->with('projects', $result);
}
Read here about querying relationships.
Inside the view you can get the relationship properties like so:
@foreach($projects as $project)
{{ $project->name }}<br/>
School: {{ $project->school->name }}<br/>
Areas:
@foreach($project->areas as $area)
{{ $area->name }},
@endforeach
Countries:
@foreach($project->countries as $country)
{{ $country->name }},
@endforeach
<br/><br/>
@endforeach
$project->countries works using magic methods. It returns a collection of related countries. The name is equivalent to the relationship name. Use it to access the eager loaded data.
Thanks Firtzberg!. I did finally figure out a longer way that works, btu it's kind of ugly and messy. This looks much more elegant and better utilizes the power of Laravel and Eloquent. I will definitely give this a try.
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community