使用教义插入查询

Posted

技术标签:

【中文标题】使用教义插入查询【英文标题】: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');

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于使用教义插入查询的主要内容,如果未能解决你的问题,请参考以下文章

教义查询:带限制删除

使用 LIMIT 查找 MySQL 中结果总数的教义查询

如何使用 symfony 在教义查询构建器中选择表之间的特定连接?

使用方法查找的教义2 oracle 查询,不起作用

教义坚持+坚持=插入+插入?

关于与查询构建器的“一对多”关系的教义内连接