Symfony2(Doctrine2)本地SQL插入

5
如何在Symfony2 Doctrine2上使用本地SQL插入数据?
我的查询:
insert into propriedades (id,name,descripcion,num_lote,cod_imovel,imovel,convenio,proprietar,cpf,area_ha,perimetro,location,centro) VALUES (nextval('propriedades_id_seq'),'?','?','?','?','?','?','?','?','?','?',ST_GeomFromKML('<Polygon><outerBoundaryIs><LinearRing><coordinates>".$terra['coordinates']."</coordinates></LinearRing></outerBoundaryIs></Polygon>'),ST_Centroid(ST_GeomFromKML('<Polygon><outerBoundaryIs><LinearRing><coordinates>".$terra['coordinates']."</coordinates></LinearRing></outerBoundaryIs></Polygon>')))
3个回答

8

您需要使用$conn->insert('table', $dataArray);。请参见文档


这对我不起作用,因为我在查询和插入中使用psql,并将其放在''中,将函数转换为字符串。 - Ciro Vargas
嗯,你可以将函数字符串放入变量中,然后将其传递给$dataArray - Mun Mun Das
放弃之前的评论。我误解了你的问题。 - Mun Mun Das
2
你可以尝试使用 $conn->executeQuery()。从文档上看,它似乎足够灵活。 - Mun Mun Das

2
在2020年,您可以执行以下操作(示例查询,请根据您的参数进行调整):
        $query = "
            INSERT INTO `user_challenges_claimed`
            SET
                `season_id` = :seasonId,
                `user_id` = :userId,
                `interval_type` = :intervalType,
                `is_claimed` = true
            ON DUPLICATE KEY UPDATE 
                `is_claimed` = true
            ;
            ";

        // set query params
        $queryParams = [
          'seasonId'     => $seasonId,
          'userId'       => $userId,
          'intervalType' => $intervalType,
        ];

        // execure query and get result
        $result = $this->manager->getConnection()
          ->executeQuery(
            $query,
            $queryParams
          );

        // clear manager entities
        $this->manager->clear();

        // optional - assert row has been inserted/modified
        if ($result->rowCount() < 1) {
            throw new ChallengeAlreadyClaimedException(
              "[{$seasonId}:{$userId} - {$intervalType}]"
            );
        }

$this->manager是一个实现了EntityManagerInterface(即EntityManager)的对象。


0

通常情况下,在Symfony 2项目中不使用所谓的本地SQL,而是使用高级别的Doctrine ORM层。

但是,有一种Doctrine DBAL层,可以使用例如MySQL查询代替DQL。这里是参考资料。

http://symfony.com/doc/2.0/cookbook/doctrine/dbal.html


我使用了query()函数,但它不支持语句,还有其他的函数可用。 - Ciro Vargas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接