使用MySQL或Laravel将关系的数量限制为一条记录

时间:2018-08-05 16:21:08

标签: php mysql laravel laravel-5 relationship

我正在寻找一种限制Laravel模型可以拥有的物品数量的方法。

模型A最多可以有5个与模型B相关的模型,但最多不能超过5个。到目前为止,我在A和B之间有很多对很多的关系,但是这允许两者之间的关系是无限的。 >

类似这样的东西

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

尝试添加A1 | B6会在插入时从MySQL返回错误,或者在尝试插入之前从Laravel返回错误。

我一直在寻找像MySQL一样独特的东西,该东西可以应用于A列,但限制为5个而不是1个。

1 个答案:

答案 0 :(得分:0)

我认为在laravel中没有内置的方法可以做到这一点。如果我正确理解了您的问题,那么您可以研究的是laravel模型事件

  

雄辩的模型会触发多个事件,使您可以陷入模型生命周期的以下几点:检索,创建,创建,更新,更新,保存,保存,删除,删除,还原,还原。通过事件,您可以在每次在数据库中保存或更新特定模型类时轻松地执行代码。

因此,您可以加入creatingsaving之类的事件之一,然后检查数据库是否具有适当数量的关系并通过引发一些异常来停止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')
   }
}

Doc Link