通过公司添加品牌,这可能吗?怎么样?

时间:2015-06-11 12:02:12

标签: php symfony doctrine-orm mapping symfony-2.6

我将这两张表(见下面的图片)映射如下:

enter image description here

class Brand
{
    ...

    /**
     * @var Company
     *
     * @ORM\ManyToOne(targetEntity="Company")
     * @ORM\JoinColumn(name="companies_id", referencedColumnName="id")
     */
    protected $company;

}

class Company
{
    ...  
}

我需要添加对Brand添加新Company的支持,但我不知道如何实现这一目标。这是通过SonataAdminBundle处理的,但我认为我需要向实体添加其他内容以便从公司创建品牌,但我不确定这将是什么,我能得到一些帮助吗?我被困了

第一次尝试

在得到答案后,这是我修改Company实体的方式:

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

class Company
{
    ...

    /**
     * @var Brand
     * @ORM\OneToMany(targetEntity="Brand", mappedBy="company", cascade={"persist"})
     **/
    protected $brands;

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

    ...

    public function getBrands()
    {
        return $this->brands;
    }

    /**
     * Add brands
     *
     * @param Brand $brand
     * @return Brands
     */
    public function addBrand( Brand $brand)
    {
        $this->brands[] = $brand;
        return $this;
    }

    /**
     * Remove brands
     *
     * @param Brand $brand
     */
    public function removeBrand( Brand $brand)
    {
        $this->brands->removeElement($brand);
    }
}

但是我收到了这个错误:

  

没有为类定义实体管理器   教义\共同\类别\ ArrayCollection的

为什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试设置这样的实体:

name = name.toUpperCase();

我们在此定义的是,可以使用class Brand { /** * @var Company * * @ORM\ManyToOne(targetEntity="Company", inversedBy="brands") * @ORM\JoinColumn(name="companies_id", referencedColumnName="id") */ protected $company; } class Company { /** * @var ArrayCollection * * @OneToMany(targetEntity="Brand", mappedBy="company", cascade={"persist"}) **/ protected $brands; } Brands实体创建新的Company

建议您在cascade={"persist"}中实施addBrandremoveBrand,以便与Company直接互动。

最终功能的一个简单示例:

ArrayCollection

修改

这只是一个例子,您可以选择不添加键或甚至实现删除功能,但这是一个起点:

$company = $service->getCompany(1); // our company entity

$brand = new Brand();
$brand->set...
...

$company->addBrand($brand);

$entityManager->persist($company);