SQLSTATE[42S22]:未找到列:1054“where 子句”sonata symfony 中的未知列“t0.id”

问题描述 投票:0回答:4

我有两个实体,奏鸣曲管理包中的实体

Devisvente
扩展实体
Ventes

这是我的实体

Ventes

    <?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

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

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

/**
 * @var \DateTime
 *
 * @ORM\Column(name="date", type="datetime")
 */
private $date;


#...........


 #...........
}

这是我的实体

Devisvente
扩展Ventes表:

    <?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Devisvente
 *
 * @ORM\Table(name="ventes")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\VentesRepository")
 */

class Devisvente extends Ventes {
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

}

每个类都有一个管理类(例如:实体 Ventes 有一个 VentesAdmin.php) 这是我对实体的班级管理员

Ventes
:

<?php

namespace AppBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

class VentesAdmin extends AbstractAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper

    ->with('Facture', array('class' => 'col-md-6'))
    ->add('compte', 'entity', array(
                'class' => 'AppBundle\Entity\compte',
                'choice_label' => 'raison_sociale',
                'required' => false
                ))
    ->add('objet', 'text')
    ->add('type', ChoiceType::class, array(
                'choices'  => array(
                    'Facture' => 'Facture partie ventes',

                )))
    ->add('reference', 'text')
    ->add('date', 'sonata_type_date_picker')
    ->end()
    ->with('Autres Informations', array('class' => 'col-md-6'))
    ->add('User', 'entity', array(
            'class' => 'AppBundle\Entity\User',
            'choice_label' => 'username',
            'required' => false
            ))
    ->add('commission', 'text')
    ->add('validite_du_devis', 'number')
    ->add('mode_de_paiement', 'text')
    ->add('compte_bancaire', 'text')
    ->end()
    ->with('Acticles', array('class' => 'col-md-12'))
    ->add('articles', 'sonata_type_model', array(
        'class' => 'AppBundle\Entity\Article',
        'property' => 'reference',
        'multiple' => true
    ))
    ->end()
    ->with('Packs', array('class' => 'col-md-12'))
    ->add('packs', 'sonata_type_model', array(
        'class' => 'AppBundle\Entity\packs',
        'property' => 'reference',
        'multiple' => true
    ))
    ->end()
    ;
}
#......
protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
    ->addIdentifier('reference')
    ->add('compte.raison_sociale')
    ->add('date')
    ->add('_action', 'actions', array(
        'actions' => array(
            'show' => array(),
            'edit' => array(),
            'delete' => array(),
        )))
    ;
}
}

这是我的实体班级管理员

Devisvente

<?php

namespace AppBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;


class DevisventeAdmin extends AbstractAdmin
{
#......
#......
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper

    ->with('Facture', array('class' => 'col-md-6'))
    ->add('compte', 'entity', array(
                'class' => 'AppBundle\Entity\compte',
                'choice_label' => 'raison_sociale',
                'required' => false
                ))
    ->add('objet', 'text')
    ->add('type', ChoiceType::class, array(
                'choices'  => array(
                    'Facture' => 'Facture partie ventes',

                )))
    ->add('reference', 'text')
    ->add('date', 'sonata_type_date_picker')
    ->end()
    ->with('Autres Informations', array('class' => 'col-md-6'))
    ->add('User', 'entity', array(
            'class' => 'AppBundle\Entity\User',
            'choice_label' => 'username',
            'required' => false
            ))
    ->add('commission', 'text')
    ->add('validite_du_devis', 'number')
    ->add('mode_de_paiement', 'text')
    ->add('compte_bancaire', 'text')
    ->end()
    ->with('Acticles', array('class' => 'col-md-12'))
    ->add('articles', 'sonata_type_model', array(
        'class' => 'AppBundle\Entity\Article',
        'property' => 'reference',
        'multiple' => true
    ))
    ->end()
    ->with('Packs', array('class' => 'col-md-12'))
    ->add('packs', 'sonata_type_model', array(
        'class' => 'AppBundle\Entity\packs',
        'property' => 'reference',
        'multiple' => true
    ))
    ->end()
    ;
}
#......
#......
protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
    ->addIdentifier('reference')
    ->add('compte.raison_sociale')
    ->add('date')
    ->add('_action', 'actions', array(
        'actions' => array(
            'show' => array(),
            'edit' => array(),
            'delete' => array(),
        )))
    ;
}
}

当我想显示、编辑或删除 Devisventes 列表中的 listField 中的项目时:

结果,我遇到了这个问题:

你能帮我吗??? 这是我的

services.yml

    # Learn more about services, parameters and containers at
# http://symfony.com/doc/current/service_container.html
parameters:
    #parameter_name: value

services:
    #service_name:
    #    class: AppBundle\Directory\ClassName
    #    arguments: ['@another_service_name', 'plain_value', '%parameter_name%']
    admin.facture:
        class: AppBundle\Admin\VentesAdmin
        arguments: [~, AppBundle\Entity\Ventes, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, group: Ventes, label: Facture, icon: "<i class=\"fa fa-file-text\"></i>" }
    admin.devisvente:
        class: AppBundle\Admin\DevisventeAdmin
        arguments: [~, AppBundle\Entity\Devisvente, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, group: Ventes, label: Devis }
    admin.user:
        class: AppBundle\Admin\UserAdmin
        arguments: [~, AppBundle\Entity\User, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, group: Settings, label: Users, icon: "<i class=\"fa fa-cog\"></i>" }

你能帮我吗?

php symfony bundle symfony-forms sonata-admin
4个回答
0
投票

我认为您应该删除

$id
实体中的
DevisVente


0
投票

我认为问题与注释有关。

父类和子类的注解指向同一个表。我认为如果父类没有映射到数据库,你必须删除它的注释

/**
 * Ventes
 *
 * 
 * 
 */
class Ventes
{
  ...
}

属性也应该声明为受保护的,而不是私有的以便继承

/**
 * Ventes
 *
 * 
 */
class Ventes
{
...
protected $id;
...
protected $reference;
...
protected $date;
}

0
投票

我也遇到了同样的问题。为了解决这个问题,我使用了学说继承映射注释: 参见继承映射

因此,您可以将数据存储在单个表中或设置类表继承。

此外,无需重写派生类中的

id
属性。 作为替代解决方案,可以使用
@MappedSuperclass
注释创建抽象父类,因此可以将数据存储在单独的表中。


0
投票

如果其他人遇到同样的问题,我也会遇到同样的错误,但这是由于我的学说 xml 模型中的小写实体名称所致。

© www.soinside.com 2019 - 2024. All rights reserved.