我得到了不必要的查询,然后实体与抽象类有if [ $i != 0 ] && (cat file.txt | grep -q sometext)
then
echo allGood
exit 0
else
echo either i is not 0 or file.txt doesnt contain sometext
exit -1
fi
的关系。
我的课程结构:
ManyToOne
我的/**
* @ORM\Entity
* @ORM\Table(name="tb_payment_info")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="integer")
* @ORM\DiscriminatorMap({
* "0" = "PaymentInfoPaypal",
* "1" = "PaymentInfoSkrill",
* })
*/
abstract class AbstractPaymentInfo
{
/**
* @ORM\Column(name="payment_info_id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
}
/**
* @ORM\Entity
* @ORM\Table(name="tb_payment_info_paypal")
*/
class PaymentInfoPaypal extends AbstractPaymentInfo
{
}
/**
* @ORM\Entity
* @ORM\Table(name="tb_payment_info_skrill")
*/
class PaymentInfoSkrill extends AbstractPaymentInfo
{
}
班级包含Payout
表格中的payment_info_id
列。
tb_payment_info
当我尝试获取任何/**
* @ORM\Entity
* @ORM\Table(name="tb_payout")
*/
class Payout
{
/**
* @var AbstractPaymentInfo
*
* @ORM\ManyToOne(targetEntity="AbstractPaymentInfo")
* @ORM\JoinColumn(name="payment_info_id", referencedColumnName="payment_info_id")
*/
private $paymentInfo;
}
实体时,其Payout
会自动初始化。所以:
paymentInfo
有2个查询:第一个用于$this->getEntityManager()->getRepository('TuoPayBundle:Payout')->find(255);
,第二个用于Payout
paymentInfo
有3个查询:第一个用于$this->getEntityManager()->getRepository('TuoPayBundle:Payout')->findBy(['id'=>[255,256]]);
,第二个,第三个单独的查询用于初始化Payout
如何实现延迟加载?
答案 0 :(得分:0)
您无法使用@ORM\Entity
表示法在Doctrine 2中声明抽象类。如果您想在对象模型中使用抽象类,我建议您检查the documentation on Mapped Superclasses如何正确执行此操作。
最重要的是,您应该使用特殊的@ORM\MappedSuperClass
注释声明该类。
请记住,Mapped超类有限制。我引用:
映射的超类不能是实体,它不是可查询的,并且由映射的超类定义的持久关系必须是单向的(仅具有拥有方)。这意味着根本不可能在映射的超类上进行一对多关联。此外,只有当映射的超类目前仅在一个实体中使用时,才能实现多对多关联。为了进一步支持继承,必须使用单个或连接表继承功能。