I have the following tables :
Locations:
id
name
areas:
id
name
buildings:
id
name
Reports:
id
content
FK | building_id
How can i write a relationship method in App\Report Model file that allow me to show the report (location) <- from \App\Location Model.
I tried with this, in Report model :
public function location()
{
return Location::whereHas('areas', function($q){
$q->whereHas('observations',function ($q){
$q->where('observations.id',$this->id);
});
})->get();
}
But it returned an error :
ErrorException (E_ERROR) Call to undefined method App\Location::whereHas() (View:
Your Location model should extends Eloquent
use Illuminate\Database\Eloquent\Model;
class Location extends Model
{
...
Also it's better to use Laravel relationships for that. You will end up with a code like this
public function location()
{
return $this->building->area->location;
}
You will need something like this
class Report extends Model
{
public function location()
{
return $this->building->area->location;
}
public function building()
{
return $this->belongsTo(App\Building::class);
}
}
class Building extends Model
{
public function area()
{
return $this->belongsTo(App\Area::class);
}
}
class Area extends Model
{
public function location()
{
return $this->belongsTo(App\Location::class);
}
}