Как получить структуру присоединения / отсоединения для отношений oneToMany? - PullRequest
0 голосов
/ 28 сентября 2018

Например.Регион и Город - две модели.Отношения определяются следующим образом:

Region.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Region extends Model
{
    public function cities() {
        return $this->hasMany('App\City');
    }
}

City.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model
{
    public $timestamps = false;

    public function region() {
        return $this->belongsTo('App\Region');
    }
}

Регион может иметь несколько городов, но город может быть связан только с одним регионом.Для этого у меня уже есть список городов, но я хочу прикрепить город с регионом на странице сведений о регионе, как если бы у нас были отношения многие ко многим.Как проверить и не разрешить привязывать город к региону, который уже присоединен к какому-либо другому региону?

1 Ответ

0 голосов
/ 28 сентября 2018

Вам нужно создать собственный метод для модели, чтобы достичь чего-то подобного.Вот пример того, как вы можете сделать это

City.php

public function attachToRegion(Region $region) {
    if ($this->region) {
        throw new CityAlreadyAttachedException();
    }

    $this->update(['region_id' => $region->id]);
}

Затем вы должны вызвать это в своем хранилище / сервисе / контроллере и пойматьисключение, если модель города уже присоединена к модели региона.Например:

try {
    $region = Region::first();
    $city = City::first()->attachToRegion($region);
} catch (CityAlreadyAttachedException $e) {
    // The city is already attached. Handle the error here
}
...