php - 我可以在表单生成器中使用查询来获取 symfony 表单中的过滤集合吗

标签 php forms symfony doctrine-orm

在 AcmePizza BUndle 中,这工作正常

->add('pizza', 'entity', array(
                'class'         => 'Acme\PizzaBundle\Entity\Pizza',
                'query_builder' => function ($repository) { return $repository->createQueryBuilder('p')->orderBy('p.name', 'ASC'); },
            ))

我可以在集合中做类似的事情

->add('userTasks','collection',array('type' => new UserTaskType(),
                    'class'         => 'acme\myBundle\Entity\UserTask',
                    'query_builder' => function ($repository) { return $repository->createQueryBuilder('p')->orderBy('p.name', 'ASC'); },
                ))

最佳答案

假设您的 userTasks 是一种关系,您将找到您的案例的答案 here 。这些只是如何排序,但如果您需要一些 WHERE 条件,那就不是那么简单,但也不难。

我必须过滤掉一些实体,解决这个问题的关键是在实体类中创建 set/get 方法返回所需的集合。

就我而言,它看起来像这样

/**
 * Set values
 *
 * @param ArrayCollection $values
 * @return Attribute
 */
public function setCustomValues($values)
{
    $result = $this->getNotCustomValues();
    foreach ($values as $value)
    {
        $value->setAttribute($this);
        $result->add($value);
    }
    $this->values = $result;

    return $this;
}

/**
 * Get values
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getCustomValues()
{
    $result = new ArrayCollection();
    foreach ($this->values as $value) {
        if($value->getCustom()) {
            $result->add($value);
        }
    }
    return $result;
}

创建表单时,字段名称为“customvalues”而不是“values” 因此,我的集合仅包含自定义字段为 true 的值。

关于php - 我可以在表单生成器中使用查询来获取 symfony 表单中的过滤集合吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11792015/

相关文章:

php - ajax不向脚本发送参数

php - 更新列数量

php - 计算两个给定日期之间的月、年和日作为时间戳

php - "header()"php函数是否取消设置全局变量?

php - 无法使用新的 MySQL 用户连接到 MySQL

php - 使用 doctrine 2 进行批处理 INSERT IGNORE 的最有效方法

PHP 打印使用 While 循环和数组返回的所有值

php - 在单页表单应用程序上插入数据库

html - 在 HTML 中使用 <label> 重要吗?

php - Symfony 2 自己的字段类型 - 总是 "This value is not valid"错误