教义2参考表

时间:2018-10-29 09:55:00

标签: doctrine-orm orm

我有以下问题。 我有两个桌子

product
id|name|stock_status_id

stock_status
stock_status_id|language_id|name

我需要通过stock_status_id在Product中获取对象StockStatus。 我使用这段代码

    <?php

namespace OC\Model\Catalog\Product;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Class Product
 *
 * @ORM\Entity
 * @ORM\Table(name="oc_product")
 */
class Product
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer", nullable=false)
     */
    protected $product_id;

    /**
     * @var ArrayCollection
     * @ORM\OneToOne(targetEntity="StockStatus", mappedBy="stock_status_id")
     * @ORM\JoinColumn(name="stock_status_id", referencedColumnName="stock_status_id")
     */
    protected $stock_status;

我需要单向联系,但条目应以所需的语言返回。我该如何替代该语言的另一个动态价值?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作。

1-首先像这样更新您的产品实体类:

namespace OC\Model\Catalog\Product;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Class Product
 *
 * @ORM\Entity
 * @ORM\Table(name="oc_product")
 */
class Product
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer", nullable=false)
     */
    protected $product_id;

    /**
     * @ORM\OneToOne(targetEntity="StockStatus")
     * @ORM\JoinColumn(name="stock_status_id", referencedColumnName="stock_status_id")
     */
    protected $stock_status;
}

只需删除Array Collection变量,因为这是一对一的关系,只有StockStatus实体类的一个对象就不会有数组。

2-查询以特定语言从产品中检索StockStatus对象

public function GetStockStatusByLanguageId($languageId)
{
    $queryBuilder = $this->entityManager->createQueryBuilder();
    $queryBuilder->select('stock_status')
                 ->from('OC\Model\Catalog\Product', 'product')
                 ->join('product.stock_status', 'stock_status')
                 ->where($queryBuilder->expr()->eq('stock_status.language_id', $languageId));

    $result = $queryBuilder->getQuery()->getResult();
    return $result;
}

假定您具有产品实体类的存储库,这是一个示例函数。只要让我知道这是否是您需要的。