Symfony 3.4 - Doctrine多对一返回Object ID但不返回Object本身

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony 3.4 - Doctrine多对一返回Object ID但不返回Object本身相关的知识,希望对你有一定的参考价值。

从上周开始我开始学习Symfony,虽然一般的东西很容易学习,但学说似乎是一个巨大的痛苦。

目前,我使用以下签名制作了两个实体:

<?php

namespace NutritionApiBundleEntity;

// ...
use DoctrineCommonCollectionsArrayCollection;
// ...

/**
 * Company
 *
 * @ORMTable(name="company")
 *     @ORMEntity(repositoryClass="NutritionApiBundleRepositoryCompanyRepository")
 */
class Company {
    /**
     * @var string
     *
     * @ORMColumn(name="id", type="guid")
     * @ORMId
     * @ORMGeneratedValue(strategy="UUID")
     */
    private $id;

    // ...

    /**
     * @var string
     * @ORMOneToMany(targetEntity="NutritionApiBundleEntityProduct", mappedBy="company")
     */
    protected $products;

    public function __construct() {
        $this->products = new ArrayCollection();
    }

    // ...
}

<?php
namespace NutritionApiBundleEntity;

use DoctrineORMMapping as ORM;
// ...

/**
 * Class Product
 *
 * @package NutritionApiBundleEntity
 *
 * @ORMEntity
 * @ORMTable(name="product")
 */
class Product {
    /**
     * @var string
     * @ORMColumn(type="guid")
     * @ORMId
     * @ORMGeneratedValue(strategy="UUID")
     */
    protected $id;

    // ...

    /**
     * @var Company
     *
     * @ORMColumn(type="guid", name="company", nullable=false)
     * @ORMManyToOne(targetEntity="NutritionApiBundleEntityCompany", inversedBy="products")
     * @ORMJoinColumn(name="company", referencedColumnName="id")
     */
    protected $company;

    // ...

    /**
     * Return the product company
     *
     * @return Company
     */
    public function getCompany() {
        return $this->company;
    }

    /**
     * Set the product company.
     *
     * @param Company $company
     *
     * @return Product
     */
    public function setCompany( Company $company ) {
        $this->company = $company;

        return $this;
    }
}

但是当我尝试执行以下代码时:

$product = $this->getDoctrine()->getRepository(Product::class)->findOneBy(['id' => '0642d735-fcfd-11e7-afae-0242c0a86002']);

return $this->render( '@NutritionApi/Default/index.html.twig', [ 'product' => $product ] );

index.html.twig里面我有这个代码:

{{ dump(product.company) }}

输出如下:

"e65af24f-fd0a-11e7-afae-0242c0a86002"

虽然我需要完整的公司对象作为输出。

你看到我的代码有什么问题吗?我已经多次阅读我的代码和我的注释以发现错误但我找不到任何东西。

我认为唯一可能是问题的是我用于数据库中实体的GUID id,但我不确定这是问题所在。

请问有什么建议吗?

答案

您可能需要删除

@ORMColumn(type="guid", name="company", nullable=false)

来自Product $ company property。

以上是关于Symfony 3.4 - Doctrine多对一返回Object ID但不返回Object本身的主要内容,如果未能解决你的问题,请参考以下文章

教义 - 如何保持多对一同步?

Doctrine实体监听器的行为不一致

多对多、一对多或多对一

使用 Doctrine 和 Symfony2 查询多对多关系

Symfony 3.4没有元数据类来处理错误

Symfony2 - 具有一对一关系的 Doctrine Save 实体