【问题标题】:Symfony2 Querybuilder - Many to many relationshipSymfony Query Builder - 多对多关系
【发布时间】:2013-03-22 08:40:19
【问题描述】:

我在查询生成器方面有点吃力。我有具有多对多关系的实体类别和预算。用户应该能够创建具有给定类别的新预算。创建新预算时,我想检查是否存在包含给定类别的预算。
为了更好地解释,假设我有类别:食品、旅行、电子产品,并且已经为旅行和食品创建了预算,然后用户想要为旅行和食品创建另一个预算,他当然不应该这样做。
我尝试使用 IN 但它只需要单个值而不是数组:

$budgets = $this->createQueryBuilder('bud');
$budgets->where('bud.user = :user')
->andWhere($budgets->expr()->in('bud.tags', array(10, 11, 12)))
->setParameter('user', $budget->getUser())
->getQuery()->getResult();

这当然会引发异常。

【问题讨论】:

    标签: symfony doctrine many-to-many query-builder


    【解决方案1】:

    部分答案是:

    // Example - $qb->expr()->in('u.id', array(1, 2, 3))
    // Make sure that you do NOT use something similar to $qb->expr()->in('value', array('stringvalue')) as this will cause Doctrine to throw an Exception.
    // Instead, use $qb->expr()->in('value', array('?1')) and bind your parameter to ?1 (see section above)
    public function in($x, $y); // Returns Expr\Func instance
    

    我看到了here

    编辑
    有一个 SQL 语句允许您过滤仅检查所有给定值的行。 这是ALL 声明。

    对于MySQL
    对于SQL Server
    对于ORACLE

    使用教义(来自here

    // Example - $qb->expr()->all($qb2->getDql())
    public function all($subquery); // Returns Expr\Func instance
    

    $subquery 应该是这样的:

    SELECT id_categorie FROM budget_categorie WHERE id_budget = '$idBudget'
    

    【讨论】:

    • 是的,但是 in 函数的问题是,$x 参数只能是单个值(这意味着 in 将返回与 $y 参数中的数组具有相同 id 的所有结果) 而我做不到 in('bud.tags', array(1,2,3))
    • 问题出在 'bud.tags' 而不是数组中,bud.tags 是一个数组,它必须是单个值
    • 对不起,我的困惑。我现在正在寻找好问题... ;) 你能显示存储预算和budget_categories 的数据库部分吗?
    • 谢谢,我会看看所有的声明,让你知道我从哪里得到的:),如果我仍然不能解决它,我会用 db 和 entity 更新我的问题类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多