【问题标题】:Symfony2 Sonata Project sonata_type_model with OneToMany entity sortbySymfony2 Sonata Project sonata_type_model 与 OneToMany 实体 sortby
【发布时间】:2015-10-29 10:01:31
【问题描述】:

我与 Symfony2 和奏鸣曲管理员一起工作。我有一个拥有子类别的实体(新闻)。每个子类别拥有一个类别,每个类别拥有一个 Affaire。 在新闻的添加页面中,我有一个子类别列表,用于选择我的子类别以链接到我的新闻。我选择的每个项目的格式如下:

<li> subcategory (category'affaire) > categoryName </li>.

我想按事务 (ASC) 对字段进行排序。

这是我的表单域定义:

protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('subCategory', 'sonata_type_model', array("label" => "Catégorie/Sous Catégorie", "btn_add" => false));
}

一个新闻拥有一个子类别

一个子类别拥有一个类别

一个类别拥有一个事务。

我尝试添加类似:

    ->add('subCategory', 'sonata_type_model', 
            array("label" => "Sub Category",
                  "btn_add" => false
            ), 
            array(
                'sortable'      => 'ordering',
                'label'         => 'subcategory.category.affaire.code',
            ))

但没有任何改变。有什么想法吗?

类别实体:

class NewsCategory
{
    /**
     * @var \My\Custom\Foo\Entity\Affaire
     *
     * @ORM\ManyToOne(targetEntity="\My\Custom\Foo\Entity\Affaire")
     * @ORM\JoinColumn(name="affaire_code", referencedColumnName="code")
     */
    private $affaire;

-- 子类别实体:

class NewsSubCategory
{
    /**
     * @var \My\Custom\Foo\Entity\NewsCategory
     *
     * @ORM\ManyToOne(targetEntity="\My\Custom\Foo\Entity\NewsCategory")
     * @ORM\JoinColumn(name="category_ref", referencedColumnName="id")
     * 
     */
    private $category;

-- 新闻实体:

class News
{
    /**
     * @var \My\Custom\Foo\Entity\NewsSubCategory
     *
     * @ORM\ManyToOne(targetEntity="\My\Custom\Foo\Entity\NewsSubCategory")
     * @ORM\JoinColumn(name="sub_category", referencedColumnName="id")
     */
    private $subCategory;

[编辑]:

我试过了

->add('subCategory', 'sonata_type_model',array("label" => "Catégorie/Sous Catégorie","btn_add" => false), array("sortable" => "ordering"))

我没有出错,但什么也没发生。我不明白我可以在哪里添加选项 (orderBy =&gt; 'Affaire') ,或者是否必须这样做......

[编辑2]:

我什至尝试过:

->add('subCategory.category.affaire', null,
                    array("label" => "Catégorie/Sous Catégorie",
                            "btn_add" => false
                    ))

【问题讨论】:

    标签: php symfony doctrine-orm jquery-ui-sortable sonata-admin


    【解决方案1】:

    我不知道如何使用 sonata_type_model 来做到这一点,但您可以将字段的类型更改为 null 或实体(null 设置默认类型)并添加 query_builder 选项以适应所使用的查询:

    ->add('subcategory', null, array(
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('sc')
                ->leftjoin('sc.category', 'c')
                ->orderBy('c.affaire', 'ASC');
        }
    ))
    

    如果您选择实体而不是 null,则还必须添加类:

    ->add('subcategory', 'entity', array(
        'class' => 'MyCustomFooBundle:Subcategory',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('sc')
                ->leftjoin('sc.category', 'c')
                ->orderBy('c.affaire', 'ASC');
        }
    ))
    

    【讨论】:

    • 好主意。我不知道你能做到。谢谢!
    【解决方案2】:

    似乎'Sortable'必须在第三个参数中。

    ->add('subCategory', 'sonata_type_model', 
            array("label" => "Sub Category",
                  "btn_add" => false
                  'sortable'      => 'ordering',
            ))
    

    然后,您有两个选择:尝试展示 Affaire

    ->add('subCategory.categorie.affaire', 'sonata_type_model', 
            array("label" => "Affaire",
                  "btn_add" => false
                  'sortable'      => 'ordering',
            ))
    

    或者我们的实体可以实现“Collections Sortable”。试试看:https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sortable.md

    (对不起,我的英文不太好)

    【讨论】:

    • 问题是我在第三个参数中放入 'sortable' => 'ordering' 时出错,我无权添加库。
    • 这是我的代码:-&gt;add('registries', 'sonata_type_model', array('label' =&gt; 'jdr_admin_log_registries','sortable'=&gt;'ordering')) 您安装了哪个版本的 Saonata Admin?我正在使用“sonata-project/admin-bundle”:“^2.3”。你可以编辑你的实体吗?
    • 我认为我的版本低于 2.3(2.1 或 2.2)。这是添加函数 pathern :public function add($name, $type = null, array $options = array(), array $fieldDescriptionOptions = array())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2016-03-05
    相关资源
    最近更新 更多