例如。区域和城市是两个模型。关系定义如下:
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');
}
}
地区可以有多个城市,但是一个城市只能与一个地区相关联。为此,我要添加一个城市列表,但要在一个区域的详细信息页面上将该城市附加到该区域,就像我们有多对多关系一样。 如何验证并不允许将城市附加到已经附加到任何其他区域的区域?
答案 0 :(得分:0)
您需要在模型上创建自定义方法,以实现类似的目的。这是您可能想怎么做的一个例子
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
}