Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这些映射彼此不一致_Php_Database_Symfony_Doctrine Orm_Mapping - Fatal编程技术网

Php 这些映射彼此不一致

Php 这些映射彼此不一致,php,database,symfony,doctrine-orm,mapping,Php,Database,Symfony,Doctrine Orm,Mapping,我对不一致的映射有问题。在我的申请中,我有两个实体-联系人(有联系人的实体…)和信息,向该联系人提供信息的实体(电话、电子邮件、传真、网站等) 在我的联系人实体中,我为每种类型创建了变量,我需要在我的应用程序中使用它,因为这样更容易: /** * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} ) */ protected $contactIn

我对不一致的映射有问题。在我的申请中,我有两个实体-联系人(有联系人的实体…)和信息,向该联系人提供信息的实体(电话、电子邮件、传真、网站等)

在我的联系人实体中,我为每种类型创建了变量,我需要在我的应用程序中使用它,因为这样更容易:

/**
 * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} )
 */
protected $contactInformations;

/**
 * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} )
 */
protected $contactPhone;

/**
 * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} )
 */
protected $contactFax;

/**
 * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} )
 */
protected $contactWebsite;

/**
 * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} )
 */
protected $contactEmail;

/**
 * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} )
 */
protected $contactCommunicator;
例如,手机的getter看起来像:

/**
 * Get contactPhone
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getContactPhone()
{
    if ($this->contactPhone !== null) {
        foreach ($this->contactPhone->toArray() as &$info) {
            if ($info->getType() !== RelationInformations::TYPE_TELEPHONE) {
                $this->contactPhone->removeElement($info);
            }
        }
    }

    return $this->contactPhone;
}
通过这种方式,我只能通过使用此功能从我的信息中获取手机,所以在应用程序的其他地方更容易获得我想要的

关系信息实体:

   /**
     * @var integer
     * @ORM\Column( name = "rnis_id" , type = "integer" , nullable = false );
     * @ORM\Id
     * @ORM\GeneratedValue( strategy = "AUTO")
     */
    private $id;

/**
 * @var integer
 * @ORM\ManyToOne( targetEntity = "RelationContact" , inversedBy = "contactInformations" )
 * @ORM\JoinColumn( name = "rnis_object_id" , referencedColumnName="rnct_id", nullable = false );
 */
private $objectID;

/**
 * @var string
 * @ORM\Column( name = "rnis_value" , type = "string" , nullable = false  )
 */
private $value;

/**
 * @var string
 * @ORM\Column( name = "rnis_type" , type = "string" , nullable = false , length = 1 )
 */
private $type;

/**
 * @var boolean
 * @ORM\Column( name = "rnis_active" , type = "boolean" , nullable = false )
 */
private $active;

/**
 * @var boolean
 * @ORM\Column( name = "rnis_default" , type = "boolean" , nullable = false )
 */
private $default;

/**
 * @var string
 * @ORM\Column( name = "rnis_txt" , type = "string" , nullable = true )
 */
private $txt;

/**
 * @var integer
 * @ORM\Column( name = "rnis_type_private_business" , type = "integer" , nullable = true )
 */
private $typePrivateBusiness;
问题是,在我的分析器中,我可以看到像bellow这样的错误。应用程序工作正常,但我想解决这个问题

The mappings RelationContact#contactPhone and RelationInformations#objectID are inconsistent with each other.
The mappings RelationContact#contactFax and RelationInformations#objectID are inconsistent with each other.
The mappings RelationContact#contactWebsite and RelationInformations#objectID are inconsistent with each other.
The mappings RelationContact#contactEmail and RelationInformations#objectID are inconsistent with each other.
The mappings RelationContact#contactCommunicator and RelationInformations#objectID are inconsistent with each other.
The mappings RelationContact#contactBrand and RelationInformations#objectID are inconsistent with each other.

您不能在同一个
mappedby
键上映射相同的
OneToMany
关系,因此条令映射验证的首要任务是正确地通过第一个
联系人信息
引用,而在另一个上失败

尝试使用联接表将实体映射为一对多、单向,如中所述


希望此帮助

请发布实体的代码
关系信息
好的,我已经添加了;)你给了我一个解决问题的办法,我现在就试试,等我知道更多的时候再写;-)一切看起来都很好,但是。。。例如,当我的表单集合映射到“contactPhone”时。Phones显示正确,但当我想添加phone时,我有一个错误,即在“ClassMetadata”中没有contactPhone这样的键(因为现在没有关系,所以此集合不是“自然的”)。有什么想法吗,马特奥?:-)查看名为“一对多,单向连接表”的doctrine2关系,看看是否满足您的要求。正如我所见,它将仅为关系创建另一个表,或者可能我没有看到什么?如文档中所述,这将强制执行一对多基数,因此我希望这能修复条令映射检查