Как решить проблему добавления новых записей в таблицу, но с ограничением, основанным на количестве уже существующих записей в таблице?
У меня есть таблица с некоторым расположением, вложенным одна в следующую.Я хочу разрешить пользователю добавлять новое местоположение и расположение, но не более определенной суммы.
Вот так выглядит моя сущность местоположения:
/**
* @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 для имен номеров).