Farshad
Farshad

Reputation: 2000

accessing nested relationship in laravel 5

i have 3 models like below :

Date
Property
PropertyDetail

and here is my migration for tables i write in order Date :

 public function up()
{
    Schema::create('dates', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->dateTime('date');
        $table->timestamps();
    });
}

Property :

 public function up()
{
    Schema::create('properties', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('type');
        $table->text('title');
        $table->integer('base_capacity');
        $table->timestamps();
    });

and PropertyDetail :

 public function up()
{
    Schema::create('property_details', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('property_id');
        $table->string('state');
        $table->string('city');
        $table->timestamps();
    });
}

i tried to remove unnecessarily fields from migration so to keep it clean so here is my 2 relations bettwen date and proeprties Datemodel :

 public function properties() {
    return $this->belongsToMany(Property::class);
 }

and propery model :

 public function dates(){
    return $this->belongsToMany(Date::class);
}
 public function features(){
    return $this->hasMany(Feature::class);
}

ok now finally in my controller i want to do this :

 $search = Date::with('properties')
        ->where('date',$someday)->get()


     ->and some how here i want to select the city from the property detail table
;

so here is my problem , now i can easily access properties and show thier name but from this relation how can i access features relation and select the city from there should i use joins or some thing there i hope i was clear enough that what i want to do

Upvotes: 1

Views: 274

Answers (1)

Mohammad Hosseini
Mohammad Hosseini

Reputation: 1797

You can do this:

Property model:

public function details(){
    return $this->belongsToMany(Details::class,'property_details','id','property_id');
}

and in Date model:

 public function properties() {
     return $this->belongsToMany(Property::class);
 }

 public function propertiesDetails() {
     return $this->properties()->with('details');
 }

and in your controller you can get detail of properties by use:

 $search = Date::with('propertiesDetails')
    ->where('date',$someday)->get();

now you can access to details of properties.

Hope it helps.

Upvotes: 1

Related Questions