【问题标题】:Setting global variable not working in Symfony设置全局变量在 Symfony 中不起作用
【发布时间】:2017-12-06 22:44:11
【问题描述】:

我无法在foreach 循环之外访问$result。当我在循环内使用dump($results); 时,我得到了结果,但是当我在循环外使用dump($results); 时,结果为空。

$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)

【问题讨论】:

  • 你确定$menu里面有什么吗?
  • 看来foreach 中的变量可能是倒退的。 $menus 这个名字听起来像一个数组的名字,而$menu 是数组的一个元素。
  • 顺便说一句,您不需要在循环中准备语句。准备一次,使用bindParam将参数绑定到变量引用,然后设置变量并在循环中调用execute()
  • 好吧,反正你每次都覆盖它,也许你想要$results[] = $statement->fetchAll();
  • 是的,我在 '$menu' 中有一个包含 4 个数据的数组,我正在尝试打印与 ''$menu'' 关联的所有数据

标签: php symfony


【解决方案1】:

您每次通过循环都会覆盖$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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2017-05-20
    • 2013-09-21
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多