2016-04-20 7 views
0

Ich stellte eine ähnliche Frage, aber dies ist eine verfeinerte Version in einem Versuch, das Problem zu isolieren.symfony mit Doktrin mit Unterklasse für Ansicht - Doktrin generiert ungültige sql

Verwenden von Symfony 3 Ich befolge diese Prozedur, um eine Unterklasse einer Tabelle zu erstellen, um eine Ansicht darzustellen. Bitte beachten Sie, ich dieses erfundene Beispiel gehalten habe so einfach wie möglich ...

init db:

create database crm; 
use crm; 
create table customer(customer_id int primary key auto_increment, companyname text); 
create view customer_view as select * from customer; 

ein neues symfony-Projekt erstellen:

symfony new crm 

bearbeiten parameters.yml:

Reverse-Engineer-Metadaten XML

php bin/console doctrine:mapping:import --force AppBundle xml 

erstellen die Ansicht Mapper manuell src/AppBundle/Resources/config/doctrine/CustomerView.orm.xml:

php bin/console doctrine:generate:entities AppBundle 

erstellen Sie die Unterklasse Einheit manuell:

<?xml version="1.0" encoding="utf-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 
    <entity name="AppBundle\Entity\CustomerView" table="customer_view"> 
    </entity> 
</doctrine-mapping> 

Einheiten erzeugen

<?php 
namespace AppBundle\Entity; 

class CustomerView extends Customer 
{ 
} 
?> 

Jetzt erstelle ich einen Controller, der einfach fragt die Ansicht ab:

<?php 

namespace AppBundle\Controller; 

use ... 

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/", name="homepage") 
    */ 
    public function indexAction(Request $request) 
    { 
     $doc = $this->get ('doctrine'); 
     $repo = $doc->getRepository ('AppBundle:CustomerView'); 
     $result = $repo->createQueryBuilder ('c')->setMaxResults(25)->getQuery()->getResult(); 

     return new Response('Result: ' . $result); 
    } 
} 

und den Besuch dieser Seite, die ich die folgende Ausnahme erhalten:

An exception occurred while executing 'SELECT c0_.companyname AS companyname_0, c0_.customer_id AS customer_id_1 FROM customer_view c1_ LIMIT 25': 

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'c0_.companyname' in 'field list' 

Wie Sie, Lehre eine Abfrage unter Verwendung eines Alias ​​c1 für die Ansicht erzeugt hat, sehen kann, aber eines Pseudonyms gestattet c0 die wählen Säulen!

Ist das ein Fehler in der Lehre, oder mache ich etwas, das es nicht unterstützen sollte?

Antwort

0

Dieses Problem tritt auf, weil die Vererbung der Entitätsklasse in Doctrine nicht auf diese Weise verwendet werden sollte. In Doktrine werden untergeordnete Entitäten als Vererbung auf der Ebene von db betrachtet. Statt der Unterklasse sollte jedes Feld customer, das in customer_view erscheint, in der CustomerView-Klasse

deklariert werden
Verwandte Themen