Symfony-将数组保存到数据库

时间:2018-10-18 09:27:10

标签: arrays json database api symfony

我编写了一个函数,在其中获取需要发布到数据库的标记数组。

enter image description here

我的函数将其存储在以下文件行中: enter image description here

我只需要像这样enter image description here

这是我的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();
        }
    }

有什么建议吗? 我认为问题出在我需要将其存储到数据库的部分。

2 个答案:

答案 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();
}