Базовая таблица или представление не найдены: таблица 1146 (Symfony)

Привет всем, у меня проблемы с запросом доктрины. Запрос очень простой и управляется следующим образом:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\View\View;
use AppBundle\Entity\Product;

    class ProductController extends FOSRestController
    {
        /**
         * @Rest\Get("/product")
         */
        public function getAction()
        {
            $em = $this->getDoctrine()->getManager();
            $restresult = $em->getRepository(Product::class)->findAll();
            if ($restresult == null) {
                return new View("there are no products exist", Response::HTTP_NOT_FOUND);
            }
            return $restresult;
        }
    }

И файл репо:

<?php

namespace AppBundle\Repository;

use Doctrine\ORM\EntityRepository;

class ProductRepository extends EntityRepository
{
    public function findAll()
    {
        $conn = $this->getEntityManager()->getConnection();
        $sql = "SELECT p.productName from Product as p ";
        $stmt = $conn->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll();
    }
}

Вместо этого файл конфигурации:

doctrine:
    dbal:
        driver: pdo_mysql
        host: '%database_host%'
        port: '%database_port%'
        dbname: '%database_name%'
        user: '%database_user%'
        password: '%database_password%'
        unix_socket: /var/lib/mysql/mysql.sock
        server_version: '5.5'
        charset: UTF8
        # if using pdo_sqlite as your database driver:
        #   1. add the path in parameters.yml
        #     e.g. database_path: '%kernel.project_dir%/var/data/data.sqlite'
        #   2. Uncomment database_path in parameters.yml.dist
        #   3. Uncomment next line:
        #path: '%database_path%'

    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true

но когда я выполняю запрос, Symfony выдает мне эту ошибку:

An exception occurred while executing 'SELECT t0.idUser AS idUser_1, t0.email AS email_2, t0.username AS username_3, t0.password AS password_4 FROM User t0 INNER JOIN user_has_product ON t0.idUser = user_has_product.User_idUser WHERE user_has_product.Product_idProduct = ?' with params [1]:\n\nSQLSTATE[42S02]: Base table or view not found: 1146 Table 'projectKobe.user_has_product' doesn't exist

Я не могу понять, как решить эту проблему и почему запрос не: «ВЫБРАТЬ p.productName FROM Product as p». Я не делал никаких внутренних соединений. Спасибо

Кроме того, я набираю php bin / console doctrine: query: sql 'SELECT * FROM Product'. Запрос работает нормально

AxeOwl 23.07.2018 16:58

код, который вы показываете, и запрос исключения кажутся действительно разными! В коде вы запрашиваете Продукт, за исключением Пользователь. Вы уверены, что это правильный запрос?

Alexandre Painchaud 23.07.2018 18:13

не могли бы вы вставить свой класс сущности

M Maavia 24.07.2018 08:07
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
2 001
1

Ответы 1

Это связано с ORM, поэтому попробуйте обновить схему базы данных.

Вы можете проверить документацию здесь

Официальный документ Собственный SQL

Пример университета КНП Запросы Doctrine Raw SQL

Я только что набрал это: php bin / console doctrine: schema: update --force. Но ошибка та же

AxeOwl 23.07.2018 17:11

я предполагаю, что имя таблицы должно быть в нижнем регистре

habibun 23.07.2018 17:13

Таблица товаров в БД называется «Товар». Таким образом, запрос должен быть в порядке, действительно, если я выполняю доктрину php bin / console: query: sql 'SELECT * FROM Product', он работает. но я не объясняю, как меняется запрос, когда я выполняю его в коде

AxeOwl 23.07.2018 17:17
symfony.com/doc/2.8/doctrine.html#querying-for-objects-with-‌ dql пробовал использовать DQL
habibun 23.07.2018 17:25

или используя построитель запросов Doctrine symfony.com/doc/2.8/…

habibun 23.07.2018 17:25

Ничего такого. "Странный" запрос такой же

AxeOwl 23.07.2018 18:07

если вы внимательно посмотрите на этот вопрос, вы увидите, что доктрина ищет db "projectKobe" и таблицу "user_has_product" вместо "Product".

habibun 23.07.2018 18:12

в чем была проблема?

habibun 23.07.2018 18:13

В сущности продукта нет сопоставления с файлом репо. Мне нужно добавить эту строку @ORM \ Entity (repositoryClass = "AppBundle \ Repository \ ProductRep‌ ository"), чтобы решить проблему, и использовать ProductRepository.php для выполнения запросов. findAll () - собственный метод, поэтому, если вы не перезаписываете его, результат запроса будет "странным".

AxeOwl 23.07.2018 18:16

Другие вопросы по теме