【问题标题】:Doctrine 2 reference table教义 2 参考表
【发布时间】:2018-10-29 09:54:59
【问题描述】:

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

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;

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

【问题讨论】:

    标签: doctrine-orm orm


    【解决方案1】:

    这样的事情是你可以做的。

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

    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;
    }
    

    假设您有一个 Product 实体类的存储库,这是一个示例函数。如果这是您需要的,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2012-01-17
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      相关资源
      最近更新 更多