使用mysql或laravel限制与记录的关系数

fgw7neuy  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(433)

我正在寻找一种方法来限制项目的数量,一个拉威尔模型可以有。
模型a最多可以有5个与之相关的模型b,但不能超过5个。到目前为止,我在a和b之间有一个多对多的关系,但是这允许在两者之间有无限数量的关系。
像这样的

A1 | B1
A1 | B2
A1 | B3
A1 | B4
A1 | B5

正在尝试添加 A1 | B6 将在插入时从mysql返回错误,或者在尝试插入之前从laravel返回错误。
我在寻找类似mysql的unique的东西,它可以应用于a列,但只能出现5次而不是1次。

vxbzzdmp

vxbzzdmp1#

我不认为有一个内在的方式来做这件事在拉威尔。如果我对你的问题理解正确,你可以研究的是拉威尔模型事件
雄辩的模型引发几个事件,允许您连接到模型生命周期中的以下几点:检索、创建、创建、更新、保存、保存、删除、删除、还原、还原。事件允许您在每次数据库中保存或更新特定模型类时轻松地执行代码。
所以你可以参与其中一个事件,比如 creating , saving 然后检查数据库是否有适当数量的关系,并通过抛出一些异常来停止db操作
这里的伪代码可能会有所帮助

class A1{
   protected $dispatchesEvents = [
      'saving' => A1SavingEvent::class,

   ];
   .....
   .....
}

//The handle method of the Listener for the A1SavingEvent

public function handle(){
   if(count(A1->B1) > 5){
      throw CountExceededException('You already have 5 relations')
   }
}

文档链接

相关问题