如何解决将新记录添加到表中的问题,但该限制取决于表中已经存在的记录数?
我有一些位置嵌套在下一个表的表。我想允许用户添加新的位置和子位置,但不超过一定数量。
这是我的位置实体的样子:
/**
* @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)。