我有一個有效的 SQL 查詢:select p.name, p.id from acv_project p join acv_product prod on prod.project_id = p.id where prod.weight <> 0 and p.green_user_id = 18
如果我將它傳遞給`
$stmt = $em->getConnection()->prepare($rawSql);
$stmt->execute([]);
$projects = $stmt->fetchAll();
它可以作業,但我想通過添加“green_user_id”作為引數而不總是 18 來傳遞它。
當我嘗試使用此代碼時:`
$sql2 = "select p from ArtoAcvBundle:Project p join prod ArtoAcvBundle:Product on prod.project_id = p.id where prod.weight <> 0 and p.green_user_id =:userId";
$query2 = $em->createQuery($sql2)->setParameters(
array('userId' => $userId));
$projects = $query2->getResult();
我明白了[Semantical Error] line 0, col 48 near 'ArtoAcvBundle:Product': Error: Identification Variable prod used in join path expression but was not defined before.
使用 QueryBuilder,我嘗試了很多東西,但無法理解如何撰寫它。
以下是我的 2 個教義物體的一些鏈接:
物體產品
物體專案
感謝幫助 !
uj5u.com熱心網友回復:
證明:
$sql2 = "select p from ArtoAcvBundle:Project p join ArtoAcvBundle:Product prod where prod.weight <> 0 and p.green_user_id =:userId";
uj5u.com熱心網友回復:
是的,非常感謝您找到此解決方案。我繼續搜索,發現 Doctrine 中有一個 bindValue() 方法。
所以我通過修改原始 SQL 的引數傳遞了我的引數,它可以作業
uj5u.com熱心網友回復:
QueryBuilder 示例
// select p from ArtoAcvBundle:Project p join prod ArtoAcvBundle:Product on prod.project_id = p.id where prod.weight <> 0 and p.green_user_id =:userId
$query = $this->getRepository(Project::class)->createQueryBuilder('p');
$query->join('p.products' , 'prod')
->andWhere('prod.weight <> 0')
->andWhere('p.greenUser = :user')
->addParameter('user', $youruserEntity);
return $query->getQuery()->getResult();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/524613.html
上一篇:關于陣列初始化的問題
