Получить массив массивов в PHP с циклом - PullRequest
0 голосов
/ 26 марта 2019

Я работаю над Symfony 3.4 в PHP 5.6.

Вот контекст моей проблемы:

У меня есть «информационная» таблица, которая содержит несколько строк. Я хочу отсортировать эти строки и отобразить их в соответствии с определенным столбцом под названием «Зона». Таким образом, цель состоит в том, чтобы, например,

"Зона 1" * Строки информации, соответствующие этой области " "Зона 2" * Строки информации, соответствующие этой области " ...

Я реализовал свои функции в репозитории, а также сделал макет под Twig. Все работало Все, что мне нужно было сделать, это оптимизировать мой код на контроллере, чтобы он стал чище.

Моя идея была поэтому:

  1. Получить массив, содержащий все существующие отдельные области, по запросу.
  2. Цикл этого массива с использованием каждого значения массива в качестве параметра для запроса SQL, который извлекает строки, соответствующие переданному полю, и извлекает их в переменную массива
  3. Создайте array_push () из массива каждой зоны, в другом массиве, который будет содержать массив каждой зоны.

Но я не могу. Это мой код

Репозиторий:

public function getInformationsZone($zone)
    {
        $queryBuilder = $this->createQueryBuilder("i")
        ->where("i.zone = :zone")
        ->orderBy("i.updatedAt","DESC")
        ->orderBy("i.criticite","DESC")
        ->setParameter('zone',$zone);

        return $queryBuilder->getQuery()->getResult();
    }

    public function getZonesActives()
    {
        $queryBuilder = $this->createQueryBuilder("i")
        ->select("i.zone")
        ->distinct(true);

        return $queryBuilder->getQuery()->getResult();
    }
* +1025 * контроллер * * тысяча двадцать-шесть
/**
     * Lists all information entities.
     *
     * @Route("/", name="informations_index")
     * @Method("GET")
     */
    public function indexAction()
    {
        $em = $this->getDoctrine()->getManager();

        $information = $em->getRepository('PagesBundle:Information')->findAll();


        $listZones = $this->getDoctrine()->getRepository('PagesBundle:Information')->getZonesActives();
        $tabInfos = array();

        foreach($listZones as $key=>$value)
        {
            $zone = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone($value);
            array_push($tabInfos,$zone);
        }



// This is what i did just before

      /*  $infosZone1 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 1");
        $infosZone2 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 2");
        $infosZone3 = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone("Zone 3");

        $tabInfos = array($infosZone1,$infosZone2,$infosZone3);*/

        return $this->render('information/index.html.twig', array(
           /* 'information' => $information,
            'infosZone1'=> $infosZone1,
            'infosZone2'=> $infosZone2,
            'infosZone3'=> $infosZone3,*/
            'tabInfos'=>$tabInfos,
        ));
    }

У меня есть эта ошибка:

Возникла исключительная ситуация при выполнении 'SELECT i0_.id AS id_0, i0_.contenu AS contenu_1, i0_.updated_at AS updated_at_2, i0_.zone AS zone_3, i0_.titre AS titre_4, i0_.criticite AS critite_5 FROM i0_ информация i0_0 .zone =? ЗАКАЗАТЬ по i0_.criticite DESC 'с параметрами ["Зона 1"]:

SQLSTATE [HY093]: недопустимый номер параметра: параметр не был определен

1 Ответ

1 голос
/ 26 марта 2019

Заменить:

$zone = $this->getDoctrine()->getRepository('PagesBundle:Information')->getInformationsZone($value);

На это:

$zone = $this
    ->getDoctrine()
    ->getRepository('PagesBundle:Information')
    ->getInformationsZone($value->getZone());

Вы передаете объект всей зоны методу getInformationsZone.

Итак, чтобы получитьназвание зоны, вы должны вызвать получатель зоны.

$value на $value->getZone();


Редактировать: Итак, просто измените $value->getZone() на $value['zone'];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...