как выбрать информацию в одной необработанной таблице - PullRequest
0 голосов
/ 03 мая 2019

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

file link :  src/java/son3.wav | word : mailing 

secund line in DB : file link : src/java/son3.wav  | word: smtp
3rd line in DB  : file link : src/java/son2.wav | word : server

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

id : 1 | file link : src/java/son3.wav | word : mailing , smtp
id : 2 | file link : src/java/son2.wav | word : server

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

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

https://i.imgur.com/9roxlOA.jpg

Это фотография моей таблицы в БД:

enter image description here

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>



and this is the code of file controller :

  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 голосов
/ 03 мая 2019

Просто сожмите результаты позже в простой php.

$viewResults = [];
foreach ($resultatas as $result) {
    if (!isset($viewResults[$result->getIndexeMot()->getMotValeur())]) {
        $viewResults[$result->getIndexeMot()->getMotValeur()] = ['id' => $result->getId(), 'motValeurs' => []];
    }
    $viewResults[$result->getIndexeMot()->getMotValeur()]['motValeurs'][] = $result->getIndexeFichier()->getFichierUrl();
}

И в виде разделите их, как вам нравится:

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

PS: Если вы используете Symfony Profiler, вы увидите, что использование findAll(), вероятно, добавит два дополнительных запроса на результат, потому что результат неправильно соединен. Было бы лучше сохранить результаты непосредственно в indexe или объединить две другие таблицы с помощью запроса доктрины: getRepository(Indexe::class)->createQueryBuilder('q')->join('q.indexeMot', 'm')->join('q.indexeFichier')->getResult();

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