gpt4 book ai didi

php - 在doctrine中插入json不起作用

转载 作者:行者123 更新时间:2023-12-02 18:32:25 25 4
gpt4 key购买 nike

我调用一个 JSON API 来向我发送数据,并且我想使用 Symfony 中的 Doctrine 将此 JSON 插入到我的 MariaDB 数据库中。

我检索的 JSON 是一个对象数组,我遵循了互联网上的几个示例(示例: Doctrine array vs simple_array vs json_array ),但没有一个有效,我不知道我的问题是什么。

这是我的代码:

    $client = new Client();
$request = $client->request('GET', 'mylink.com');
$response = $request->getBody();
$livescore = json_decode($response, true);

$array = [];
foreach($livescore as $value) {
if($value['match_hometeam_name'] === 'Lyon' || $value['match_awayteam_name'] === 'Lyon') {
$array = $value;
break;
}
}

$livescoreObj = new Livescore();
$livescoreObj->setDateRafraichissement(new \DateTime());
$livescoreObj->setMatch($array);

$this->entityManager->persist($livescoreObj);
$this->entityManager->flush($livescoreObj);

return new JsonResponse($array);

我的实体:

    <?php

namespace SGBundle\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
* Livescore
*
* @ORM\Entity()
*/
class Livescore
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer", options={"unsigned":true}, nullable=false)
*
* @var int
*/
private $id;

/**
* @ORM\Column(type="json_array", nullable=true)
*
* @var string
*/
private $match;

/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $dateRafraichissement;

/**
* @return mixed
*/
public function getId()
{
return $this->id;
}

/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}

/**
* @return mixed
*/
public function getMatch()
{
return $this->match;
}

/**
* @param mixed $match
*/
public function setMatch($match)
{
$this->match = $match;
}

/**
* @return \DateTime
*/
public function getDateRafraichissement()
{
return $this->dateRafraichissement;
}

/**
* @param \DateTime $dateRafraichissement
*/
public function setDateRafraichissement($dateRafraichissement)
{
$this->dateRafraichissement = $dateRafraichissement;
}
}

我的错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 Error syntax near 'match, date_rafraichissement) VALUES ('{\"match_id\":\"257194\",\"country_id\":\' at line 1

提前感谢您的帮助

最佳答案

您的问题是 $match 属性:MATCHreserved word在 MySQL 中,在查询中使用时需要加引号。

由于某些原因,Doctrine 不会自动引用字段。但你可以tell it to quote the field name构建查询时。请尝试以下操作:

/**
* @ORM\Column(name="`match`", type="json_array", nullable=true)
*
* @var string
*/
private $match;

关于php - 在doctrine中插入json不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48755941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com