Доступ к вложенным отношениям в Laravel 5 - PullRequest
1 голос
/ 11 апреля 2019

У меня есть 3 модели, как показано ниже:

Date
Property
PropertyDetail

и вот моя миграция для таблиц, которые я пишу по порядку Дата:

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

Недвижимость:

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

и 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();
    });
}

я пытался удалить ненужные поля из миграции, чтобы сохранить их в чистоте, поэтому вот мои 2 отношения между датой и собственностью Datemodel:

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

и правильная модель:

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

Хорошо, теперь, наконец, в моем контроллере я хочу сделать это:

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


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

так вот в чем моя проблема, теперь я могу легко получить доступ к свойствам и показать их имя, но из этого соотношения, как я могу получить доступ к отношению функций и выбрать город оттуда, если я буду использовать соединения или что-то там, я надеюсь, что я достаточно ясно понял, что что я хочу сделать

1 Ответ

1 голос
/ 11 апреля 2019

Вы можете сделать это:

Модель недвижимости:

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

и в Дата модели:

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

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

и в вашем контроллере вы можете получить подробную информацию о свойствах, используя:

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

Теперь вы можете получить доступ к деталям свойств.

Надеюсь, это поможет.

...