如何设置保存记录的限制?

时间:2019-03-27 14:16:30

标签: php sql symfony dql

如何解决将新记录添加到表中的问题,但该限制取决于表中已经存在的记录数?

我有一些位置嵌套在下一个表的表。我想允许用户添加新的位置和子位置,但不超过一定数量。

这是我的位置实体的样子:

  /**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\Column(type="string", length=10)
 */
private $barCode;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\LocationType")
 */
private $locationType;

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Location")
 */
private $locationParent;

我以这种方式添加新位置:

 switch ($name) {
       case 'Location':
            $locationType = $this->locationType(LocationType::SUBLOCATION);
            $locationParent = $this->locationParent($id);
            $lastBarcode = $this->lastBarcode($locationType, $id);

            if ($lastBarcode) {
                $parentBarcode = $locationParent->getBarcode();
                $lastBar = $lastBarcode->getBarcode();
                $bar = $lastBar[-1];
                $a = $this->checkLocationLimit($locationParent, $lastBar);

            } else {
                $parentBarcode = $locationParent->getBarcode();
                $startValue = 'A';
            }
            break;

        case 'SUBLOCATION':
            $locationType = $this->locationType(LocationType::SUBSUBLOCATION);
            $locationParent = $this->locationParent($id);
            $lastBarcode = $this->lastBarcode($locationType, $id);

            if ($lastBarcode) {
                $parentBarcode = $locationParent->getBarcode();
                $lastBar = $lastBarcode->getBarcode();
                $bar = $lastBar[-1];

            } else {
                $parentBarcode = $locationParent->getBarcode();
                $startValue = '1';
            }
            break;
        }  
ETC.

然后:

    for ($i = 0; $i < $numberOfLocation; ++$i) {
         if ($name == 'Location') {
            if ($lastBarcode) {
                $barcode = $parentBarcode . ++$bar;
            } else {
                $barcode =  $parentBarcode . $startValue++;
            }
        } elseif ($name == 'Sublocation') {
            if ($lastBarcode) {
                $barcode = $parentBarcode . ++$bar;
            } else {
                $barcode = $parentBarcode . $startValue++;
            }
ETC.


$location = new Location();
        $location->setLocationType($locationType);
        $location->setLocationParent($locationParent);
        $location->setBarcode($barcode);

        $this->entityManager->persist($location);
        $this->entityManager->flush();

它给了我条形码的位置:

1 - 1A - 1A1

2 - 2A - 2A2

etc.

但是我想允许用户添加不超过25个位置(A-Z)的子位置,并且添加不超过10个(1-10)的子位置。

我做了类似的事情来计算已经存在的子位置的数量,如下所示:

        $parent = $locationParent->getId();
        $firstChar = $lastBar[0];
        $allSublocations = $this->locationRepository->createQueryBuilder('location')
              ->andWhere('location.barcode LIKE :firstChar
                     AND parent.id LIKE :locationParent')
               ->leftJoin('location.locationParent', 'parent')
               ->andWhere('parent.id like :locationParent')
               ->setParameters(['firstChar' => $firstChar.'%', 'locationParent' => $parent])
               ->getQuery()
               ->getArrayResult();

而且我不知道如何检查用户要添加多少新记录,并使其保持小于我写的记录(对于字母命名的位置为25,对于数字命名的位置为10)。

0 个答案:

没有答案