我需要将 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/