2017-12-06 7 views
-3

foreachループ外の$resultにアクセスできませんでした。ループ内にdump($results);を使用すると結果が出ますが、ループの外側にdump($results);を使用している場合は空です。グローバル変数がsymfonyで動作しない

$results = array(); 

foreach ($menu as $menus) { 
    $mid = $menus->getId(); 
    $em = $this->getDoctrine()->getManager(); 
    $connection = $em->getConnection(); 

    $statement = $connection->prepare("SELECT s.subtitle,m.* FROM submenu as s,menu as m where s.menu_id=m.id and m.id=:data"); 
    $statement->bindValue('data', $mid); 
    $statement->execute(); 
    $results = $statement->fetchAll(); 
} 
dump($results) 
+0

'$ menu'には何もありませんか? – Barmar

+0

'foreach'のあなたの変数が後方にあるかもしれないようです。 '$ menus'という名前は配列の名前のように聞こえますが、' $ menu'は配列の要素になります。 – Barmar

+0

ところで、ループ内でステートメントを準備する必要はありません。一度準備し、 'bindParam'を使ってパラメータを変数参照にバインドし、変数を設定して、ループ内で' execute() 'を呼び出します。 – Barmar

答えて

0

ループのたびに$results変数を上書きしています。したがって、最後の値は最後のクエリの結果になります。あなたはすべてのクエリの結果を組み合わせたいと思うので、配列をマージする必要があります。

変更

$result = $statement->fetchAll(); 

へ:

$result += $statement->fetchAll(); 

代わりにあなただけの単一のクエリにすべてのクエリを組み合わせることができます。すべてのメニューIDを配列$menuIDsに入れて、次のようにします。

$sql = "SELECT s.subtitle,m.* FROM submenu as s,menu as m where s.menu_id=m.id and m.id IN (" . implode(',', array_fill(0, count($menuIDs), '?')) . ")"; 
$statement = $connection->prepare($sql); 
$statement->execute($menuIDs); 
$results = $statement->fetchAll(); 
関連する問題