Как выбрать несколько слов в одном поле, они имеют один и тот же файл WAV? - PullRequest
0 голосов
/ 14 мая 2019

я хочу выбрать информацию по ссылке на файл, например, в базе данных в первой строке:

ссылка на файл: src / java / son3.wav |слово: рассылка

вторая строка в БД: ссылка на файл: src / java / son3.wav |слово: smtp

3-я строка в БД: ссылка на файл: src / java / son2.wav |слово: сервер

Я хочу показать это в html.twig ::

id: 1 |ссылка на файл: src / java / son3.wav |слово: рассылка, smtp
id: 2 |ссылка на файл: src / java / son2.wav |слово: сервер

, чтобы выбрать все слова в БД, которые имеют одинаковую ссылку на файл. Надеюсь, это объясняет, что мне нужно.

Я использую Symfony 3.4 и вот какэто показало в моем интерфейсе:

https://i.stack.imgur.com/7EQ63.jpg

это рис моей таблицы в БД:

https://i.stack.imgur.com/MEYaJ.jpg

this is the code of file twig :

  <table  class="table table-striped">
          <thead>
              <tr>
                 <th>Id</th>
                  <th>File Link</th>
                  <th>Words</th>

              </tr>
          </thead>
          <tbody>

          {% for result in resultats %}
                <tr>
                  <td><a href="{{ path('result', { 'id': result.id }) }}">{{ result.id }}</a></td>
                  <td>{{ result.indexeFichier.fichierUrl }}</td>
                  <td>{{ result.indexeMot.motValeur }}</td>




              </tr>
          {% endfor %}
          </tbody>
      </table>

и этокод контроллера файла:


  public function IndexAction()
    {


      ////////////////////////////////////////////
      $em = $this->getDoctrine()->getManager();
      $resultats = $em->getRepository('AppBundle:Indexe')->findAll();
      return $this->render('userfiles/result.html.twig', array(
          'resultats' => $resultats,
      ));

    }

1 Ответ

0 голосов
/ 14 мая 2019

Я думаю, что это невозможно сделать только с помощью запроса DQL, постобработка может помочь:

публичная функция IndexAction () {

  ////////////////////////////////////////////
  $em = $this->getDoctrine()->getManager();

  $tmp = $em->getRepository('AppBundle:Indexe')->findAll();
  $tmp2 = [];
  foreach ($tmp as $v) {
      if (!isset($resultats[$v->getIndexeFichier()->getFichierUrl()])) {
          $resultats[$v->getIndexeFichier()->getFichierUrl()] = [];
      }
      $resultats[$v->getIndexeFichier()->getFichierUrl()][] = $v->indexeMot()->getMotValeur();

  }

  $resultats = [];
  $i = 1;
  foreach ($tmp2 as $k=>$v) {
      $resultats[] = ['id' => $i++, 'fichierUrl' => $k, 'motValeur' => join(', ', $v)];
  }

  return $this->render('userfiles/result.html.twig', array(
      'resultats' => $resultats,
  ));

}

и в шаблоне

  ....
  {% for result in resultats %}
        <tr>
          <td><a href="{{ path('result', { 'id': result.id }) }}">{{ result.id }}</a></td>
          <td>{{ result.fichierUrl }}</td>
          <td>{{ result.motValeur }}</td>
      </tr>
  {% endfor %}
  ....

также, если ваш db - mysql, вы можете попробовать использовать GROUP_CONCAT() function

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