【问题标题】:Symfony2 (doctrine2) native sql insertSymfony2(doctrine2)原生sql插入
【发布时间】:2012-09-14 08:45:24
【问题描述】:

如何在原生sql的symfony2教义2中插入数据?

我的查询

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>')))

【问题讨论】:

    标签: symfony doctrine doctrine-orm persistence


    【解决方案1】:

    你必须使用$conn-&gt;insert('table', $dataArray);。见documentation

    【讨论】:

    • 这对我不起作用,因为我在查询中使用 psql 并在插入时将其插入到 '' 中,将函数转换为字符串
    • 嗯,您可以将函数字符串放入变量中,然后将其传递给$dataArray
    • 放弃之前的评论。我误解了你的问题。
    • 你可以试试$conn->executeQuery()。从文档来看,它看起来足够灵活。
    【解决方案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-&gt;manager 是一个实现EntityManagerInterface 的对象(即EntityManager)。

    【讨论】:

      【解决方案3】:

      通常你不会在 symfony 2 项目中使用所谓的原生 sql,而是使用高级 Doctrine ORM 层。

      但是有一个原则 dbal 层可以启用例如mysql 查询而不是 DQL。这是参考

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

      【讨论】:

      • 我使用了函数 query() 但这没有语句支持,有其他函数
      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2014-10-06
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多