mysql - 教义 : How to join on a specific row?

标签 mysql join doctrine-orm query-builder doctrine-query

让我们看看我的类(class)。可以看到,Model中有Batteries,这是ManyToMany的关系。模型还有 1 block 电池,这是数量最多的电池之一。

例如,我想选择电池(不是任何一个电池)大于 1500mAh 的所有型号。我本来想加入模型上的电池,但这意味着所有电池都会加入。在我看来,这是一种性能浪费,因为我已经知道我想加入哪个电池。有没有办法加入特定行?

型号:

    /**
 * @Entity
 **/

class Model{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @Column(type="string")
     */
    protected $name;

    /**
     * @Column(type="string", nullable=true)
     */
    protected $alias;


    /**
     * @ManyToMany(targetEntity="Battery", cascade={"persist"})
     * @JoinTable(joinColumns={@JoinColumn(referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(referencedColumnName="id", unique=true)}
     *      )
     */
    protected $batteries;

    /**
     * @OneToOne(targetEntity="Battery")
     * @JoinColumn(referencedColumnName="id", nullable=true)
     */
    protected $battery;
}

电池:

/**
 * @Entity
 **/

class Battery{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @Column(type="integer")
     */
    protected $mah;

    /**
     * @Column(type="integer")
     */
    protected $count;
}

最佳答案

您可以在联接中指定条件:

$queryBuilder = $this->createQueryBuilder('model')
                     ->select('model')
                     ->from('Model', 'model')
                     ->join('model.battery', 'battery', 'WITH', 'battery.mah > 1500');

DQL 版本:

$query = $entityManager->createQuery('SELECT model FROM Model model JOIN model.battery battery WITH battery.mah > 1500');

关于mysql - 教义 : How to join on a specific row?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748636/

相关文章:

php - Doctrine 2 : Page, block 、策略模式和相关实体

MySql - 大型表 IP 配对的更好架构?

javascript - 在for循环javascript中显示唯一值

mysql - 如何将%放入字符串中

sql - 在 SQL 中使用其他表作为 WHERE 条件

php - ManyToMany Doctrine 与 FOSUserBundle 的关系

mysql - 在 MySQL 中查找最接近的前后时间

SQL:高效计算花费的时间

MYSQL表日历和右连接

doctrine-orm - Zend Framework - Doctrine2 - 存储库查询缓存