我对教义有问题。我有两个实体。
好友请求
class FriendRequest
{
/** @ORMId @ORMColumn(type="integer") @ORMGeneratedValue **/
protected $id;
/**
* First person from friendship
*
* @ORMOneToOne(targetEntity="User")
* @ORMJoinColumn(name="id", referencedColumnName="id")
*/
protected $from;
/**
* Second person from friendship
*
* @ORMOneToOne(targetEntity="User")
* @ORMJoinColumn(name="id", referencedColumnName="id")
*/
protected $to;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @return mixed
*/
public function getFrom()
{
return $this->from;
}
/**
* @param mixed $from
*/
public function setFrom($from)
{
$this->from = $from;
}
/**
* @return mixed
*/
public function getTo()
{
return $this->to;
}
/**
* @param mixed $to
*/
public function setTo($to)
{
$this->to = $to;
}
}
和用户
/**
* @ORMEntity @ORMTable(name="users")
*/
class User
{
/** @ORMId @ORMColumn(type="integer") @ORMGeneratedValue **/
protected $id;
/** @ORMColumn(type="string") **/
protected $email;
/** @ORMColumn(type="string") **/
protected $password;
/** @ORMColumn(type="string") **/
protected $name;
/** @ORMColumn(type="string") **/
protected $surname;
/** @ORMColumn(type="date") **/
protected $date;
/** @ORMColumn(type="string") **/
protected $sex;
/**
* @return mixed
*/
public function getSex()
{
return $this->sex;
}
/**
* @param mixed $sex
*/
public function setSex($sex)
{
$this->sex = $sex;
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getEmail()
{
return $this->email;
}
/**
* @param mixed $email
*/
public function setEmail($email)
{
$this->email = $email;
}
/**
* @return mixed
*/
public function getPassword()
{
return $this->password;
}
/**
* @param mixed $password
*/
public function setPassword($password)
{
$this->password = $password;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return mixed
*/
public function getSurname()
{
return $this->surname;
}
/**
* @param mixed $surname
*/
public function setSurname($surname)
{
$this->surname = $surname;
}
/**
* @return mixed
*/
public function getDate()
{
return $this->date;
}
/**
* @param mixed $date
*/
public function setDate($date)
{
$this->date = $date;
}
}
我试图创建新的友谊请求。
$from = $this->entity_manager->getRepository(User::class)->findOneBy(
["id" => $my_id]
);
$to = $this->entity_manager->getRepository(User::class)->findOneBy(
["id" => $target_user_id]
);
/** @var FriendRequest $friend_request */
$friend_request = new FriendRequest();
$friend_request->setFrom($from);
$friend_request->setTo($to);
$this->entity_manager->persist($friend_request);
$this->entity_manager->flush();
但它不起作用。教义告诉我错误:
使用参数 [186] 执行"插入朋友请求 (id( 值 (?(" 时发生异常:
SQLSTATE[HY000]:常规错误:1364 字段"from"没有默认值。
我试图打印$from广告$to,但它们是正确的。有人知道这意味着什么吗?我花了很多时间在它身上,但我不知道...
我认为您的问题来自 FriendRequest 实体类中$from和$to属性的声明,如果您尝试更新数据库模型,您将收到如下错误:
[Doctrine\ORM\Mapping\MappingException]
在字段或鉴别器列映射中实体"FriendRequest"上重复定义列"id"。
由于您为两个不同的属性分配了相同的名称"id"。可能您的数据库中有两列 From 和 To,但它们没有与您的模型映射,这就是为什么您收到一条错误消息,指出 from 没有默认值。由于数据库中的列名称与实体中的属性名称不同步。
假设您已经有一个 FriendRequest 表,并且您使用"from"和"to"作为列名,这应该是 FriendRequest 实体类的更新。
class FriendRequest
{
/** @ORMId @ORMColumn(type="integer") @ORMGeneratedValue **/
protected $id;
/**
* First person from friendship
*
* @ORMOneToOne(targetEntity="User")
* @ORMJoinColumn(name="from", referencedColumnName="id")
*/
protected $from;
/**
* Second person from friendship
*
* @ORMOneToOne(targetEntity="User")
* @ORMJoinColumn(name="to", referencedColumnName="id")
*/
protected $to;
...
}