【问题标题】:How can use querybuilder with Symfony formbuilder to join two entities?如何使用带有 Symfony formbuilder 的 querybuilder 来连接两个实体?
【发布时间】:2019-10-21 16:19:33
【问题描述】:
$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';

错误信息:

[Semantical Error] line 0, col 127 near 'field = :fie': Error: Class App\Entity\Data 没有字段或关联命名字段

【问题讨论】:

  • data.field 是一个有效的映射字段吗?还要检查参数设置器,它是->setParameter('id', 16) 没有:,对于字段参数也是如此。
  • 我还要说,您的错误消息与您的代码不匹配。
  • @yceruto 谢谢,这解决了问题!现在唯一的问题是,我的选择框中没有任何数据<select> </select>

标签: php symfony join query-builder formbuilder


【解决方案1】:

你的班级有以下内容吗?

use Doctrine\ORM\Mapping as ORM;

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

通常这足以让教义解决该错误

  • 正如@yceruto 在 cmets 中所说的那样

是的

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

代替

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

【讨论】:

  • 谢谢,现在错误消失了。但是现在选择框是空的<select> </select>
  • 我认为这一行也没有必要,因为当映射正确时,学说会处理:->andWhere('dd.uuid = data.document_id')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多