我编写了一个函数,在其中获取需要发布到数据库的标记数组。
这是我的api调用。
public function generate(Map $seatMap)
{
$layout = $seatMap->getSeatLayout();
$seats = [];
$layoutArray = json_decode($layout, true);
$columns = range('A', 'Z');
foreach($layoutArray as $index => $result)
{
$columnLetter = $columns[$index];
$letters = str_split($result);
$letterIndex = 1;
foreach($letters as $letterIndex => $letter) {
switch($letter) {
case 'e':
$seats[] = $columnLetter . $letterIndex;
$letterIndex++;
}
}
}
foreach($seats as $seat => $result) {
$result = new Seat();
$result->setName(json_encode($seats));
$this->em->persist($result);
$this->em->flush();
}
}
有什么建议吗? 我认为问题出在我需要将其存储到数据库的部分。
答案 0 :(得分:0)
如果我对您的理解正确,那么您的问题在这里:
foreach($seats as $seat => $result) {
$result = new Seat();
$result->setName(json_encode($seats));
$this->em->persist($result);
$this->em->flush();
}
}
您确实在为每个席位创建新的Seat
实例,但是在这一行:
$result->setName(json_encode($seats));
您仍将所有(编码的)座位分配给Seat
的每个实例。您想要的是仅分配当前循环迭代中的席位,该席位由$result
变量表示。
所以尝试:
$result->setName($result);
这里也不需要json_encode
。
答案 1 :(得分:0)
如果您的数组就像您说的那样,请尝试
foreach($seats as $seat) {
$result = new Seat();
$result->setName($seat);
$this->em->persist($result);
$this->em->flush();
}