使用教义插入查询
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
【讨论】:
以上是关于使用教义插入查询的主要内容,如果未能解决你的问题,请参考以下文章