Php 保存时多对一(人员对公司)重复公司时出错 我想要什么
我已在会话中保存了类型为App\Model\Company的对象,在插入新客户时,我需要正确引用已注册的公司 目前这种情况正在发生 保存App\Model\People的新记录时,将创建App\Model\Company的新记录(与会话中的数据记录相同)我想创建的Crm\Model\People新记录与新的App\Model\Company注册相关,而不是与以前的记录相关 这是我的Php 保存时多对一(人员对公司)重复公司时出错 我想要什么,php,doctrine-orm,zend-framework2,persist,Php,Doctrine Orm,Zend Framework2,Persist,我已在会话中保存了类型为App\Model\Company的对象,在插入新客户时,我需要正确引用已注册的公司 目前这种情况正在发生 保存App\Model\People的新记录时,将创建App\Model\Company的新记录(与会话中的数据记录相同)我想创建的Crm\Model\People新记录与新的App\Model\Company注册相关,而不是与以前的记录相关 这是我的人实体: use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity
人
实体:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="tbl_crm_people")
*/
class People extends Entity
{
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $people_id;
/**
* @ORM\ManyToOne(targetEntity="App\Model\Company", cascade={"all"})
* @ORM\JoinColumn(name="people_company_id", referencedColumnName="company_id")
*/
protected $people_company;
/**
* @ORM\Column(type="string", length=60)
*/
protected $people_name;
}
以及我的公司
实体
<?php
namespace App\Model;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="tbl_app_company")
*/
class Company extends Entity
{
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $company_id;
/**
* @ORM\Column(type="string", length=250)
*/
protected $company_name;
public function getId()
{
return $this->company_id;
}
}
我想说您应该尝试从您的
人
实体中删除级联={“all”}
。只有在创建/删除/更新用户时,如果要创建/删除/更新公司,才应添加此选项。我猜这不是你想要的行为。
级联操作就是在发布新用户时创建新公司的原因
原则上,如果记录已经存在,则不应创建新公司。因此,我猜在您的saveAction
中也发生了一些不一致的情况
您确定$CurrentUser->getCompany()
正在返回类型为App\Model\Company
在您的人员实体中创建一个方法来设置公司,并使用该方法来设置公司,而不是设置$data['People\u company']
。优点还在于,如果$company不是company
类型,PHP将抛出一个异常
public function setCompany(Company $company)
{
$this->people_company = $company
return $this;
}
public function setCompany(Company $company)
{
$this->people_company = $company
return $this;
}