mysql - 如何在没有 "real"外键的情况下获取加入 Doctrine?

标签 mysql symfony doctrine-orm

我需要将 HolidayPackage 的实例“连接”到 Discount(一对一),并且能够在从存储库获取数据时获取连接。即:

 // Inside a method of HolidayPackageRepository repository class
 $qb = $this->createQueryBuilder($alias = 'hp');
 $qb->leftJoin("$alias.discount", 'd')
    ->addSelect('d'); // fetch join

问题discount表每隔几个小时就会被删除并重新填充,所以discount_id不能成为真正的外键。但是标识符可能保持不变:

/**
 * @ORM\Entity()
 * @ORM\Table("holiday_package")
 */
class HolidayPackage
{
    /**
     * @ORM\Column(name="discount_id", type="integer", nullable=true)
     *
     * @var null|Discount
     */
    private $discount;
}

如何在没有真正外键的情况下获取连接?

最佳答案

我从未实际尝试过,但根据文档,从 2.4 开始,可以在任意列上连接实体,只要两个实体都已映射,使用“通常”的 JOIN ... WITH 语法:

SELECT u FROM User u JOIN Blacklist b WITH u.email = b.email

但是,我不确定它是否允许您在上面的示例中实际获取加入“黑名单”,或者它只会允许您限制结果。

关于mysql - 如何在没有 "real"外键的情况下获取加入 Doctrine?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24711812/

相关文章:

php - ZF2 应用中的 Doctrine ORM 缓存

mysql - MySQL 数据库中可搜索的用户名列使用什么数据类型和索引?

php - Doctrine 将一个实体发送给 DQL 的 NEW 构造函数

php - 学说 dql 没有返回 MySQL 所期望的结果

fosuserbundle - 如何访问注入(inject)服务中的用户 token 以重新编码密码?

php - 如何在 Doctrine 中的多对多 JoinTable 上添加索引定义?

validation - 准则2,Symfony 2中的独特约束

c# - MySQL Connector/NET 的 MySqlCommand 不使用参数

mysql - 是否可以在文件夹中组织表格或其他对象?

php - 需要帮助删除 mysql 结果中的重复列