Symfony 2.8 Объект при доступе к displayAction Route SQLSTATE [42P01]: неопределенная таблица: 7 ОШИБКА: отсутствует запись предложения FROM для таблицы "t10" - PullRequest
0 голосов
/ 15 февраля 2019

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

, поэтому я пытаюсь сделать первый шаг, чтобы сделать объект клиента таким, как этот

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Customer
 *
 * @ORM\Table(name="customer")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CustomerRepository")
 */
class Customer 
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="text")
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="address", type="text")
     */
    private $address;

    /**
     * @ORM\OneToOne(targetEntity="User", inversedBy="customer")
     */
    private $user;

    /**
    * @ORM\OneToOne(targetEntity="Cart", mappedBy="user", cascade={"persist"})
    */
    protected $cart;

    // public function __construct()
    // {
    //     parent::__construct();
    //     // your own logic
    // }

    // other properties and methods


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

    /**
     * Set name
     *
     * @param string $name
     *
     * @return Customer
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

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

    /**
     * Set address
     *
     * @param string $address
     *
     * @return Customer
     */
    public function setAddress($address)
    {
        $this->address = $address;

        return $this;
    }

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

    /**
     * Set cart
     *
     * @param \AppBundle\Entity\Cart $cart
     * @return User
     */
    public function setCart(\AppBundle\Entity\Cart $cart = null)
    {
        $this->cart = $cart;
        return $this;
    }
    /**
     * Get cart
     *
     * @return \AppBundle\Entity\Cart 
     */
    public function getCart()
    {
        return $this->cart;
    }

    // public function __construct()
    // {
    //     parent::__construct();

    //     $this->addRole("ROLE_CUSTOMER");
    // }
}

, и когда я получаю доступ к localhost / customer, я получаю сообщение об ошибке, подобное этому

Возникла исключительная ситуация, когдавыполнение 'SELECT t0.id AS id_1, t0.name AS name_2, t0.address AS address_3, t0.user_id AS user_id_4, t5.id AS id_6, t5.total_price AS total_price_7, t5.quantity AS количество_8, t5.user_id AS user_id_9ОТ клиента t0 ВЛЕВО СОЕДИНИТЬ корзину t5 ВКЛ t5.user_id = t10.id ':

SQLSTATE [42P01]: неопределенная таблица: 7 ОШИБКА: отсутствует запись предложения FROM для таблицы "t10" ЛИНИЯ 1: ..._9 ОТ клиента t0 СЛЕДУЮЩАЯ ПОДКЛЮЧИТЕ корзину t5 ВКЛ t5.user_id = t10.id ^

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

, и это мой контроллер клиента

 <?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use AppBundle\Entity\User;
use AppBundle\Entity\Customer;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;

class CustomerController extends Controller
{
    /**
     * @Route("customer/new", name="new_address")
     */
    public function newAction(Request $request)
    {
        $user = new Customer();
        $form = $this->createFormBuilder($user)
        ->add('name', TextType::class)
        ->add('address', TextType::class)
        ->add('save', SubmitType::class, array('label' => 'Submit'))
        ->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $user = $form->getData();
            $doct = $this->getDoctrine()->getManager();

            $doct->persist($user);

            $doct->flush();

            return $this->redirectToRoute('address_list');
        } else {
            return $this->render('customer/new.html.twig', array(
                'form' => $form->createView(),
            ));
        }
    }

    /**
     * @Route("/customer", name="address_list")
     */
    public function displayAction()
    {
        $user = $this->getDoctrine()
            ->getRepository('AppBundle:Customer')
            ->findAll();

            return $this->render('customer/display.html.twig', array('data' => $user));
    }

    /**
     * @Route("/customer/update/{id}", name="address_update")
     */
    public function updateAction($id, Request $request)
    {
        $doct = $this->getDoctrine()->getManager();
        $user = $doct->getRepository('AppBundle:Customer')->find($id);

        if (!$user) {
            throw $this->createNotFoundException(
                'No customer found for id '.$id
            );
        }
        $form = $this->createFormBuilder($user)
        ->add('address', TextType::class)
        ->add('save', SubmitType::class, array('label' => 'Submit'))
        ->getForm();

        $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $user = $form->getData();
                $doct = $this->getDoctrine()->getManager();

                $doct->persist($user);

                $doct->flush();

                return $this->redirectToRoute('address_display');
            }
        return $this->render('customer/new.html.twig', array(
            'form' => $form->createView(),
        ));
    }

    /**
     * @Route("customer/delete/{id}", name="customer_delete")
     */
    public function deleteAction($id) {
        $doct = $this->getDoctrine()->getManager();
        $user = $doct->getRepository('AppBundle:Customer')->find($id);

        if (!$user) {
            throw $this->createNotfoundException('No customer found for id ',$id);
        }
        $doct->remove($user);
        $doct->flush();
        return $this->redirectToRoute('address_display');
    }
}

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

1 Ответ

0 голосов
/ 15 февраля 2019

Я не знаю, почему это может решить эту проблему, поэтому я пытаюсь раскомментировать эту строку

public function __construct()
    {
        parent::__construct();

        $this->addRole("ROLE_CUSTOMER");
    }

Это решило проблему, которую я могу открыть и получить доступ к localhost / customer

...