Symfony2多对一获取空参数

时间:2015-10-04 15:51:20

标签: php symfony doctrine-orm

我与' 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}  

为什么第一个参数为空!

1 个答案:

答案 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();