我与' login_log'有一对一的关系。和' user_info'和' user_account'。这是三个实体的总结。
class UserInfo extends Entity {
/**
* @ORM\Column(name="user_id", type="integer")
* @ORM\Id
*/
protected $userId;
/**
* @ORM\Column(name="true_name", type="string", length=20)
*/
protected $trueName;
...
}
class UserAccount extends Entity {
/**
* @ORM\Column(name="user_id", type="integer")
* @ORM\Id
*/
protected $userId;
/**
* @ORM\Column(name="user_name", type="string", length=20, nullable=true)
*/
protected $userName;
...
}
class LoginLog extends Entity {
/**
* @ORM\Column(name="log_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $logId;
/**
* @ORM\ManyToOne(targetEntity="UserInfo")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
*/
protected $userInfo;
/**
* @ORM\ManyToOne(targetEntity="UserAccount")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
*/
protected $userAccount;
/**
* @ORM\Column(name="user_id", type="integer")
*/
protected $userId;
...
}
当我想要添加登录日志时:
$log = new LoginLog();
$log->setUserId(11);
$em->persist($log);
$em->flush();
但是在symfony profiler中,我收到了这些查询:
INSERT INTO login_log (user_id) VALUES(?)
Parameters: { 1: null}
为什么第一个参数为空!
答案 0 :(得分:1)
这没有任何意义:
/**
* @ORM\ManyToOne(targetEntity="UserAccount")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
*/
protected $userAccount;
/**
* @ORM\Column(name="user_id", type="integer")
*/
protected $userId;
他们都使用相同的列名,摆脱userId属性,并为userAccount使用setter。
现在,你正在设置一件事,在进行查询时,教条会吓坏了,并使用另一个。
明白我的意思?
$log = new LoginLog();
$log->setUserAccount($user); // $user beeing an actual user, not an ID
$em->persist($log);
$em->flush();