我将这两张表(见下面的图片)映射如下:
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的
为什么?
答案 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"}
中实施addBrand
和removeBrand
,以便与Company
直接互动。
最终功能的一个简单示例:
ArrayCollection
修改
这只是一个例子,您可以选择不添加键或甚至实现删除功能,但这是一个起点:
$company = $service->getCompany(1); // our company entity
$brand = new Brand();
$brand->set...
...
$company->addBrand($brand);
$entityManager->persist($company);