【问题标题】:INSERT query with doctrine使用教义插入查询
【发布时间】:2021-08-09 19:12:33
【问题描述】:

大家早上好, 我在 symfony4 下的一个项目' 我做了一个协会会员管理申请。 直到现在,当我想用​​ csv 文件更新我的会员列表时,我直接在 phpMyAdmin 中完成了。我有一个暂存表,我称之为“import_csv”。我在这张桌子上导入了我的 csv 文件,感谢我添加和更新我的会员列表的两个请求。但我想创建一个管理界面来做同样的事情。 我设法在我的中间表上创建了我的 csv 文件的导入管理。 我想将我的 SQL 查询转录到我的 Symfony 控制器中,这就是我要阻止的地方。 我的第一个 SQL 查询来添加位于我的表上的新成员:

INSERT INTO adherent
(last_name,first_name,to_number,born)
  
SELECT
import_csv.last_name,import_csv.first_name,iimport_csv.to_number,import_csv.born
FROM import_csv LEFT JOIN adherent ON import_csv.to_number=adherent.to_number
WHERE adherent.to_number IS NULL

我尝试了很多东西,但我做不到:

/**
     * @Route("import/insert", name="import_insert")
     */
public function import_insert(ObjectManager $manager)
{
  
    $qb = $manager->createQueryBuilder();
    $qb ->select('import_csv.last_name,import_csv.first_name,import_csv.to_number,import_csv.born')
        ->from('\App\Entity\Import_csv','i')
        ->leftjoin('\App\Entity\Adherent on i.to_number=a.to_number','a')
        ->where('a.to_number IS NULL');
  
        $adherent = new \App\Entity\Adherent();
  
        $manager->persist($adherent);
        $manager->flush();
  
    return $this->redirectToRoute('import_csv');
}

感谢您能给我的任何帮助。

【问题讨论】:

    标签: php sql symfony insert doctrine


    【解决方案1】:

    我在 ORM 下使用了一个层,即 DBAL(用于数据库抽象层),它允许本地查询等。

    use Doctrine\DBAL\Driver\Connection;
    use Symfony\Component\HttpFoundation\Response;
    ...
     
    /**
         * @Route("import/insert", name="import_insert")
         */
    public function import_insert(Connection $connection): Response
    {
     
        $users = $connection->fetchAll('INSERT INTO adherent
        (last_name,first_name,to_number,born)
           
        SELECT
        import_csv.last_name,import_csv.first_name,import_csv.to_number,import_csv.born
        FROM import_csv LEFT JOIN adherent ON import_csv.to_number=adherent.to_number
        WHERE adherent.to_number IS NULL');
     
        return $this->redirectToRoute('import_csv');
    }
    

    它有效。数据库采用指示的值,但没有返回,我有这个错误: SQLSTATE[HY000]: 一般错误

    【讨论】:

      【解决方案2】:

      很好,我找到了。

      $connection->exec('INSERT INTO adherent
          (last_name,first_name,to_number,born)
      

      执行且没有 fetchAll

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多