如何将querybuilder与Symfony formbuilder结合使用以连接两个实体?

时间:2019-10-21 16:19:33

标签: php symfony join query-builder formbuilder

我的数据库表“文档”:

id  uuid        timestamp               name           pages    
86  37a4a52951  2019-10-18 18:13:08     something1     9    
87  g4fbc106ab  2019-10-18 18:18:46     something2     23   
91  77d2fde844  2019-10-21 15:58:37     Blue           16   
92  9f05834314  2019-10-21 15:58:52     Black          16   
93  9a7d8e32b2  2019-10-21 16:00:20     Orange         16   
94  32b38338a1  2019-10-21 17:13:18     test           3    

我的数据库表“数据”:

id      uuid        content     field   document_id
805     14cc8a5e48  Baloons        35   77d2fde844
806     6a0c9dfcc1  Bob            81   77d2fde844
807     c9061ea3e0  Fairytales     35   9f05834314
808     ed5cbb124a  Alan           81   9f05834314
809     59f33d724c  Dreams         35   9a7d8e32b2
810     b8c0fc2f6f  Oliver         81   9a7d8e32b2
811     8fad6b9334  Banana         85   4fc75ebbdf

我尝试使用formbuilder和查询生成器创建一个选择框,其中包含所有通过页面16和字段35连接到文档的数据。

我尝试打印的输出是这样:

 <select>
  <option value="91">Baloons</option>
  <option value="92">Fairytales</option>
  <option value="93">Dreams</option>
</select> 

这是我的方法:

$options['class'] = 'App\\Entity\\Data';
$options['attr'] = array('class' => 'form-control select2');
$options['query_builder'] = function (EntityRepository $er) use ($fieldId,$documentId) {
    return $er->createQueryBuilder('data')
        ->leftJoin('data.documents', 'dd')
        ->andWhere('dd.pages = :id')
        ->andWhere('dd.uuid = data.document_id')
        ->andWhere('data.field = :field')
        ->setParameter(':id', 16)
        ->setParameter(':field', 35)
     ;
};
$options['choice_label'] = 'content';

错误消息:

  

[语义错误]第0行,'field =:fie'附近的col 127:错误:类   App \ Entity \ Data没有字段或名为字段的关联

1 个答案:

答案 0 :(得分:1)

您的课程中有以下内容吗?

use Doctrine\ORM\Mapping as ORM;

class Data
{
    /**
     * @ORM\Column(name="field")
     */
    private $field;
}

通常,教义足以解决该错误

  • 正如@yceruto在评论中所说的

// This is right
->setParameter('field', 22)

代替

// This is wrong
->setParameter(':field', ...)