2016-12-23 7 views
0

ここは私のoptions arrayです。ここで配列から動的にメソッドのパラメータを設定する(DoctrineのFindByメソッドを使用)

array(2) { 
["status"] => string(1) "1" 
["dateCreated"] => string(4) "DESC" 
} 

は私hardcoded doctrine findby codeです:

$posts = Pluto::registry('doctrine') 
->getRepository(\Application\Entity\Post::class) 
->findBy(
    ['status'=>1], 
    ['dateCreated'=>'DESC'] 
); 

私は何を探していることはfindBy基準(Nのcriterias)を設定する動的なソリューションです。

私はこのコードをどこかに持っています(私は実際に彼らが何をしているか知っていませんが、それについての情報があればそれを知っています)、それはオブジェクトを作成するために働いていました。それが返すような作業をdoesntの。あなたが実際には配列が、列のリストを渡すと、私は変換することができますどのよう

のcriteriasされていませんfindByメソッドにパラメータを渡すときに

$data = Pluto::registry('doctrine') 
    ->getRepository($config->className) 
    ->findBy(...array_values($newWhereClauses)); 

    // or ->findBy(...$newWhereClauses); 

を見ることができるようにfindByパラメータは動的にからあなたがメソッドへのパラメータのいくつかの(動的な量)を送信する必要がある場合は

+0

を3個のドットです[可変長引数リスト](http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list)であり、PHP 5.6で導入されました。これは基本的に 'func_get_args()'の新しい、より短い(そしてもっと明確な)構文です。 –

+0

@MagnusEriksson okこれは正しいパスですか? findByメソッドにoptions配列を動的に追加するにはどうすればいいですか? – jkushner

+0

関数を呼び出すときは、 'public function myFunction(... $ hello)'のような関数定義でしか使用できません。関数に渡したすべての引数(どれだけ)を配列として '$ hello'変数に追加します。 –

答えて

0

、あなたはこのようにcall_user_func_array()を使用することができます。

$arguments = [ 
    ['status'=>1], 
    ['dateCreated'=>'DESC'] 
]; 

$queryInstance = Pluto::registry('doctrine') 
    ->getRepository(\Application\Entity\Post::class); 

$posts = call_user_func_array(
    [$queryInstance, 'findBy'], 
    $arguments 
); 

はこちら続きを読む:http://php.net/manual/en/function.call-user-func-array.php

関連する問題