我有一个实体A,它与实体B具有OneToOne关系,而实体B与实体C具有ManyToOne关系。
A 1:1 B 1:n C
如果我加载A,则获取连接的B,但是C仍然为空,尽管我在B中将C定义为fetch =“ EAGER”
这是正确的行为吗?我可以通过 findAll 语句获取A来获得C吗?
这是我的代码: 在A类“收费”中:
/**
* One Charge has one ChargeDetail.
*
* @ORM\OneToOne(targetEntity="ChargeDetail", inversedBy="charge", cascade={"persist"})
* @ORM\JoinColumn(name="charge_detail_id", referencedColumnName="id")
*/
private ?ChargeDetail $chargeDetail = null;
B类ChargeDetail中的
/**
* @ORM\ManyToOne(targetEntity="Fraud", fetch="EAGER")
* @ORM\JoinColumn(name="fraud_id", referencedColumnName="id")
*/
private ?Fraud $fraud = null;
C类欺诈
/**
* @ORM\Entity(repositoryClass="App\Repository\FraudRepository")
* @codeCoverageIgnore
*/
class Fraud
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="smallint", options={"unsigned":true})
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string", length=255)
*/
private string $name;
.....
在代码中:
/* @var Charge[] $charges */
$charges = $this->chargeRepo
->findBy([], ['id' => 'DESC'], 1, 0);
$charge = $charges[0];
$ charge将正确填充属性chargeDetail,但是chargeDetail仍将欺诈作为null。
答案 0 :(得分:0)
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/working-with-objects.html#entity-object-graph-traversal指出,即使是延迟加载,您也可以按照想要的深度进行关联。
我的问题是代码在另一个地方,我搞砸了。因此,伙计们,如果您没有犯其他愚蠢的错误,那么上面显示的情况是可行的。