2017-11-24 16 views
0

私はNativeSQLを使用しており、未定義のパラメータを設定する必要があります。私のコード:DoctrineのネイティブSQL:複数のクエリパラメータの型を設定する

$entityManager = $this->getEntityManager(); 
$rsm = new Query\ResultSetMappingBuilder($entityManager); 
$mySql = " 
    SELECT * 
    FROM table1 t1 
    INNER JOIN table2 t2 ON t2.t1_id = t1.id 
    ... 
    WHERE t1.name = :t1_name AND t2.age = :t2_age AND ... 
"; 
// array of multiple query parameters (name, value) 
$queryParameters = array(
    't1_name' => 'Andy', 
    't2_age' => 12, 
    ... 
); 
$query = $entityManager->createNativeQuery($mySql, $rsm); 
$query->setParameters($queryParameters); 
$salidas = $query->getResult(); 

すべてのクエリパラメータの型を設定する必要がありますが、setParameters()関数はこの型を渡すことはできません。

私は

どのように... setParameterをAbstractQueryの()関数(教義クラス)がこの型を渡すことができますが、私はPARAMATERSの未定義の数を渡すために持っているので、私はsetParamaters()関数を使用したいことがわかり私はこれを解決することはできますか?ありがとう。

+0

「すべてのクエリパラメータのタイプを設定する必要がある」とはどういう意味ですか? –

+0

WHEREパラメーターのタイプ。私の例では、:t1_name(文字列型)と:t2_age(整数型)です。たとえば、次のようなものがあります。[PDO bindParam()](http://php.net/manual/en/pdostatement.bindparam.php#refsect1-pdostatement.bindparam-examples) – Wildchild

+0

なぜこれが必要ですか?私にはあなたの質問に[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)があるようです:あなたの試みではなくあなたの試行された*解決策*を尋ねる*実際の問題*。 –

答えて

0

次を使用して、クエリに複数のパラメータを渡すことができます。

$entityManager = $this->getEntityManager(); 

$sql = " 
    SELECT * 
    FROM table1 t1 
    INNER JOIN table2 t2 ON t2.t1_id = t1.id 
    ... 
    WHERE t1.name = :t1_name AND t2.age = :t2_age AND ... 
"; 

// array of multiple query parameters (name, value) 
$stmt = $entityManager->getConnection()->prepare($sql); 

$stmt->execute([ 
    't1_name' => 'Andy', 
    t2_age' => 12, 
    ... 
]); 

$results = $stmt->fetchAll(); 

リファレンスData Retrieval And Manipulation

関連する問題