我有两个实体,奏鸣曲管理包中的实体
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>" }
你能帮我吗?
我认为您应该删除
$id
实体中的 DevisVente
。
我认为问题与注释有关。
父类和子类的注解指向同一个表。我认为如果父类没有映射到数据库,你必须删除它的注释
/**
* Ventes
*
*
*
*/
class Ventes
{
...
}
属性也应该声明为受保护的,而不是私有的以便继承
/**
* Ventes
*
*
*/
class Ventes
{
...
protected $id;
...
protected $reference;
...
protected $date;
}
我也遇到了同样的问题。为了解决这个问题,我使用了学说继承映射注释: 参见继承映射
因此,您可以将数据存储在单个表中或设置类表继承。
此外,无需重写派生类中的
id
属性。
作为替代解决方案,可以使用 @MappedSuperclass
注释创建抽象父类,因此可以将数据存储在单独的表中。
如果其他人遇到同样的问题,我也会遇到同样的错误,但这是由于我的学说 xml 模型中的小写实体名称所致。