Php 保存时多对一(人员对公司)重复公司时出错 我想要什么

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

我已在会话中保存了类型为App\Model\Company的对象,在插入新客户时,我需要正确引用已注册的公司

目前这种情况正在发生 保存App\Model\People的新记录时,将创建App\Model\Company的新记录(与会话中的数据记录相同)我想创建的Crm\Model\People新记录与新的App\Model\Company注册相关,而不是与以前的记录相关

这是我的
实体:
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;
}