Контроллер, репозиторий и массив печати веток (Symfony3)

Мне нужно распечатать домены одного пользователя

ENTITY (здесь код объекта)

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Domini
 *
 * @ORM\Table(name="domini")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\DominiRepository")
 */
class Domini
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var int
     *
     * @ORM\Column(name="id_user", type="integer")
     */
    private $idUser;

    /**
     * @var string
     *
     * @ORM\Column(name="dominio", type="string", length=100, unique=true)
     */
    private $dominio;


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set idUser
     *
     * @param integer $idUser
     *
     * @return Domini
     */
    public function setIdUser($idUser)
    {
        $this->idUser = $idUser;

        return $this;
    }

    /**
     * Get idUser
     *
     * @return int
     */
    public function getIdUser()
    {
        return $this->idUser;
    }

    /**
     * Set dominio
     *
     * @param string $dominio
     *
     * @return Domini
     */
    public function setDominio($dominio)
    {
        $this->dominio = $dominio;

        return $this;
    }

    /**
     * Get dominio
     *
     * @return string
     */
    public function getDominio()
    {
        return $this->dominio;
    }
}

РЕПОЗИТОРИЙ (вот код репо)

<?php

namespace AppBundle\Repository;
use AppBundle\Entity\Domini;
use Doctrine\ORM\EntityRepository;

class DominiRepository extends \Doctrine\ORM\EntityRepository
{
    /**
     * @return dominio[]
     */
    public function findAllPublishedOrderedBySize()
    {

        $query = 'SELECT dominio FROM AppBundle:Domini dominio';
        $mydomain = $this->getEntityManager()->createQuery($query);
        return $mydomain->execute();

    }
}

КОНТРОЛЛЕР

<?php
// src/AppBundle/Controller/DominiController.php
namespace AppBundle\Controller;

use AppBundle\Entity\Domini;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Doctrine\ORM\EntityManagerInterface;

class DominiController extends Controller
{
/**
     * @Route("/admin/domini")
     */
    public function dominiAction()
    {
        $title = "ADMIN";
        $nome_utente = $this->getUser();

            $user = $this->getUser()->getId();
        $em = $this->getDoctrine()->getManager();

        $dominilist = $em->getRepository('AppBundle:Domini')
        ->findAllPublishedOrderedBySize();

        return $this->render('admin/domini.html.twig', [
            'title' => $title,
            'nome_utente' => $nome_utente,
            'user' => $user,
            'dominilist' => $dominilist,
        ]);

    }

}

ВЕТКА

<h1>{{ title }}</h1>
<h2>Benvenuto: {{ nome_utente }}</h2>
<h3>USER ID:{{ user }}</h3>


<ul>
    {% for item in dominilist %}
        <li>{{ item.dominio }}</li>
    {% endfor %}
</ul>

ТАБЛИЦА MySQL

имя стола: домини

поля: id, id_user, доминио

Теперь все работает нормально, но 'dominilist' => $dominilist не работает. Dominio — это доменное имя, сохраненное под «dominio». Почему?

ЕСЛИ я пытаюсь зациклить это поле, это не сработает.


person flexicon    schedule 11.09.2017    source источник
comment
Вы пробовали $mydomain->getResult()?   -  person Albeis    schedule 11.09.2017
comment
перед выполнением, а не выполнением? какие...   -  person flexicon    schedule 11.09.2017
comment
вместо метода execute(). С Уважением   -  person Albeis    schedule 11.09.2017
comment
да.. ничего не происходит (нет ошибки)   -  person flexicon    schedule 11.09.2017


Ответы (1)


Если вы хотите выбрать все данные, хранящиеся в этой таблице, вы можете использовать быстрый и удобный метод прямо в вашем контроллере.

# Controller
$dominilist = $em->getRepository('AppBundle:Domini')
    ->findAll();

Или вы также можете найти domini по id в контроллере:

# Controller
$user = $this->getUser()->getId();
$dominilist = $em->getRepository('AppBundle:Domini')->findBy(['id'=>$user]);

И только если вы хотите иметь более сложный запрос, то вы можете создать метод q в репозитории. Как то "Мне нужно печатать домены одного пользователя"

# Repository
public function findAllPublishedOrderedBySize($id)
{
    $qb = $this->createQueryBuilder('d');
    $qb
        ->select('d.dominio')
        ->where('d.id = :id')
        ->setParameter('id', $id)
    ;

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

# Controller
$user = $this->getUser()->getId();
$domini = $em->getRepository('AppBundle:Domini')
    ->findAllPublishedOrderedBySize($user);

В любом случае, запросы такого типа невелики, и вы можете создать их в контроллере, как я показал вам выше.

person Dan Costinel    schedule 11.09.2017
comment
Комментарии не для расширенного обсуждения; этот разговор был перенесено в чат. Убедитесь, что вы отредактировали ответ, включив в него всю необходимую информацию. - person Cody Gray; 11.09.2017
comment
а, извините, это: $dominilist = $this->getDoctrine()->getRepository('AppBundle:Domini')->findB‌​‌​y(['id_user' => $user]); - person Dan Costinel; 11.09.2017
comment
$id_user = $this->getUser()->getId(); -------------- $dominilist = $this-›getDoctrine()-›getRepository('AppBundle:Domini')-›findBy(['id_user' =› $id_user]); ------------ Неизвестное поле: id_user - person flexicon; 11.09.2017
comment
отредактируйте свой исходный пост в самом верху этой страницы и включите код вашего AppBundle/Entity/Domini.php файла - person Dan Costinel; 11.09.2017
comment
БЛИН: .........findBy(['idUser' =› $id_user]); но... зачем symfony переписывать имя таблицы? почему я должен это делать??? такой сумасшедший... - person flexicon; 12.09.2017
comment
поведение по умолчанию заключается в том, что имя таблицы будет именем сущности. - person Dan Costinel; 12.09.2017
comment
проблема была в названии столбца... потому что id_user - это столбец, а не имя таблицы... в любом случае! огромное спасибо. считаю очень полезными ваши советы!! - person flexicon; 12.09.2017