Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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
Php 如何在Symfony 4中使用带有formBuilder的queryBuilder?_Php_Symfony_Oop_Query Builder_Formbuilder - Fatal编程技术网

Php 如何在Symfony 4中使用带有formBuilder的queryBuilder?

Php 如何在Symfony 4中使用带有formBuilder的queryBuilder?,php,symfony,oop,query-builder,formbuilder,Php,Symfony,Oop,Query Builder,Formbuilder,我在Symfony中使用查询生成器时遇到困难。 与此类似,我的选择框列出了存储在我的实体“选项”中的所有数据: 但我想过滤数据,以便选项仅显示连接到实体“字段”的特定id的数据 这是我使用查询生成器的方法: $options['class'] = Options::class; $options['choice_label'] = 'id'; $options['query_builder'] = function (EntityRepository $id) { return $thi

我在Symfony中使用查询生成器时遇到困难。 与此类似,我的选择框列出了存储在我的实体“选项”中的所有数据:

但我想过滤数据,以便选项仅显示连接到实体“字段”的特定id的数据

这是我使用查询生成器的方法:

$options['class'] = Options::class;
$options['choice_label'] = 'id';
$options['query_builder'] = function (EntityRepository $id) {
    return $this->createQueryBuilder('f')
        ->leftJoin('f.fields', 'fi')
        ->where(":id MEMBER OF f.fields")
        ->setParameter(':id', $id)
        ->getQuery()
        ->execute();
};
我收到的错误消息是:

参数1传递给 App\Controller\PagesController::App\Controller{closure}()必须是 App\Controller\EntityRepository的实例,的实例 App\Repository\options给定存储库,已调用 /Users/work/project/vendor/symfony/doctrine bridge/Form/Type/EntityType.php 第32行


让我们从一个事实开始,
EntityRepository
是一个正在开发的核心理论库
条令\ORM\EntityRepository名称空间。我也怀疑你的项目中是否还有另一个
实体报告

所以,第一个错误是错误的类型提示。您应该添加
使用条令\ORM\EntityRepository在控制器之前<代码>选项存储库
将符合此定义,因为它扩展了
实体存储库
,或者至少它应该

第二个错误是
->setParameter(':id',$id)
-您不能将存储库设置为查询的参数,它是无用的。我不知道什么是
$id
,但与任何其他回调函数一样,您可以
使用它

第三,由于选项名为
QueryBuilder
,您的回调应该返回
QueryBuilder
,所以删除
->getQuery()->execute()

最后,适当的代码应为:

use Doctrine\ORM\EntityRepository;

//....

$options['query_builder'] = function (EntityRepository $er) use ($id) {
    return $er->createQueryBuilder('f')
        ->leftJoin('f.fields', 'fi')
        ->where(":id MEMBER OF f.fields")
        ->setParameter(':id', $id);
};

更改typehint?您是否已将EntityRepository导入到包含该表单的类中?谢谢,这在混乱中对我帮助很大。我照你的建议做了。我现在仍然有一个错误
类型为“条令\ORM\QueryBuilder”,“数组”的预期参数给定
我必须找出解决方法,并在解决问题后立即通知您我必须删除最后两行
->getQuery()->execute()然后它就成功了!
use Doctrine\ORM\EntityRepository;

//....

$options['query_builder'] = function (EntityRepository $er) use ($id) {
    return $er->createQueryBuilder('f')
        ->leftJoin('f.fields', 'fi')
        ->where(":id MEMBER OF f.fields")
        ->setParameter(':id', $id);
};