Symfony - 访问非相关表的对象

时间:2015-11-25 14:15:22

标签: symfony doctrine-orm

如何在连接时访问第二个表的对象(非相关表)?

我有两个不相关的表,我想得到第二个类的对象(来自下面的转储输出)

My repository with dump

例如:

我的控制员:

$ProductSet_Repo = $em->getRepository('MyTestBundle:Product\ProductSet')->FindProductSet($productid);

通常当表格相关时,我可以很简单地进行操作

$productSet = $ProductSet_Repo->getproductid()->getProduct();Product class获取ProductSet Class的对象。

See My Dump

但是由于这些表没有关系,当我转储数据时,我得到了两个类的对象,有没有办法可以访问对象My\TestBundle:Products\Entity\Product\ProductSet\My\TestBundle\Entity\Product\Product

注意:我不想在两个表之间建立关系,因为我正在处理已经存在的表,我不想对其进行任何更改

我也知道我可以选择要检索的字段。 (我不想这样做)

2 个答案:

答案 0 :(得分:0)

你写道:

  

我不想在两个表之间建立关系,因为我正在处理已经存在的表,我不想对其进行任何更改。

但是使用学说,你可以在不改变表格的情况下在两个实体之间建立关联。据我所知,您的product_id表格中有一个product_set列。这就是在ProductProductSet之间建立关联所需的全部内容。

ProductSet课程中,你可以这样做:

<?php

namespace My\TestBundle\Entity\Product;

class ProductSet
{
    //... other properties

    /**
     * @var Product
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="My\TestBundle\Entity\Product\Product")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
     */
    protected $product;

    /**
     * Set the product.
     *
     * @param Product $product
     * @return ProductSet
     */ 
    public function setProduct(Product $product)
    {
        $this->product = $product;
        return $this;
    }

    /**
     * Get the product.
     *
     * @return Product
     */ 
    public function getProduct()
    {
        return $this->product;
    }

    //... other setters and getters
}

现在你可以做到:

$repository = $em->getRepository('MyTestBundle:Product\ProductSet')
$productSets = $repository->findBy(array('product' => $productid));

foreach($productSets as $productSet){
    $productSet->getProduct()->getId() === $productId; // true
}

答案 1 :(得分:0)

你仍然可以使用查询构建器或本机sql加入它们(尽管在另一个实体中你有相应对象id的奇怪的命名约定),但这是一个非常糟糕的方法。

  

它是由以前的webdeveloper开发的,我不想花更多的时间,因为我作为自由的lancer工作

这不是借口。您应该为这些数据创建关系和迁移。为设计不佳和开发的应用程序赚钱并不酷。

使用这种糟糕的设计可能需要额外的工作,而不是以适当的方式进行。