Как установить лимит сохраняющихся записей? - PullRequest
0 голосов
/ 27 марта 2019

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

У меня есть таблица с некоторым расположением, вложенным одна в следующую.Я хочу разрешить пользователю добавлять новое местоположение и расположение, но не более определенной суммы.

Вот так выглядит моя сущность местоположения:

  /**
 * @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 подразделов местоположения (AZ) и не более вложенных подразделов размещения, чем 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 для имен номеров).

...