Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Symfony2:(子)类别自定义字段类型_Forms_Symfony_Categories - Fatal编程技术网

Forms Symfony2:(子)类别自定义字段类型

Forms Symfony2:(子)类别自定义字段类型,forms,symfony,categories,Forms,Symfony,Categories,我在创建自定义字段类型时遇到一些问题 我拥有的是一个实体: Category Id | Name | parent_id 最后我想要的是一个select字段,如下所示: Category 1 - SubCategory 1 - SubCategory 2 Category 2 - Subcategory 3 - SubCategory 4 Category 3 Category 4 $builder->add('category', 'entity', array(

我在创建自定义字段类型时遇到一些问题

我拥有的是一个实体:

Category  
Id | Name | parent_id    
最后我想要的是一个select字段,如下所示:

Category 1
- SubCategory 1
- SubCategory 2
Category 2
- Subcategory 3
- SubCategory 4
Category 3
Category 4
$builder->add('category', 'entity', array(
                'class' => "AcmeAppBundle:Category",
                "property" => "Name",
                 'query_builder' => function (\path\to\CategoryRepository $repository)
                 {
                     return $repository->getOrderedCategories();
                 }
                )  
所以我的方法是创建一个实体字段,从CategoryRepository返回一个函数。像这样:

Category 1
- SubCategory 1
- SubCategory 2
Category 2
- Subcategory 3
- SubCategory 4
Category 3
Category 4
$builder->add('category', 'entity', array(
                'class' => "AcmeAppBundle:Category",
                "property" => "Name",
                 'query_builder' => function (\path\to\CategoryRepository $repository)
                 {
                     return $repository->getOrderedCategories();
                 }
                )  
存储库包含:

class CategoryRepository extends EntityRepository
{
 public function getCategories()
{
    return $this->getEntityManager()
        ->createQuery('SELECT u FROM AcmeAppBundle:Category u WHERE u.parent is NULL ORDER BY u.priority DESC')
        ->getResult();
}

public function getOrderedCategories()
{
   //get the Parent-"Nodes"
   $entity = $this->getCategories();
   $arr = array();

    foreach ($entity as $cat) {  

        $arr[]=$cat;  

        foreach ($cat->getChildren() as $child)
        { 
           $arr[] = $child;
        }
    }
}  
我当前的错误消息是:

Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given   
这是一个好方法吗?有更好的吗

编辑:
根据请求:类别实体

/**
* Category
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Acme\AppBundle\Entity\CategoryRepository")
*/
class Category
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

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

/**
 * @var integer
 *
 * @ORM\Column(name="Priority", type="integer", nullable=true)
 * 
 */
private $priority;

/**
 * @ORM\OneToMany(targetEntity="Phrase", mappedBy="category")
 */
protected $phrases;

/**
 * @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
 **/
protected $children;

/**
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
 * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
 **/
protected $parent;

public function __construct() {
    $this->children = new ArrayCollection();
}

public function getChildren()
{
    return $this->children;
}

public function getParent()
{
    return $this->parent;
}

public function setParent($parent)
{
    if($parent -> getParent() == NULL)
    {
            $this->parent = $parent;
    }  
}

 public function getPhrases()
{
    return $this->phrases;
}
...some Setters&Getters  

实体字段类型中的“query\u builder”选项必须返回QueryBuilder实例,而不是$QueryBuilder->getQuery()->getResult()。(在您的案例中,这是一个数组)


是否尝试为您的类别实现树结构?给Gedmo的分机一次机会:)

请查看我的答案,如果有任何不清楚/遗漏,请询问:)首先,感谢您的快速回复。虽然这不是我想要的。第一,leftJoin不起作用-我只得到父实体(我用arraycollection映射了子实体-这可能是问题吗?)和第二:我想按照上面描述的格式设置选项,我不能只使用一个查询,可以吗?我要试试TreeeExtension。谢谢你,尼弗!能否请您提供您的类别实体类,所以-没有它无法帮助您或建议更好的实现。如果我的回答对你有帮助,请接受或至少投赞成票;)我非常感谢您的帮助,我向您保证,一旦我有代表,您将立即获得您的投票;)我只是不想已经接受这个答案。也许会有其他的答案。类别实体现在位于问题的末尾。