当我运行以下命令时:php app/console doctrine:schema:update --force --dump-sql
它会返回以下消息:Nothing to update - your database is already in sync with the current entity metadata
。
我有两个实体,User和UserProfile。
user.php的
/**
* @ORM\Table(name="users", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\OneToOne(targetEntity="UserProfile", inversedBy="user_id")
*/
private $id;
...
UserProfile.php
/**
* @ORM\Table(name="users_profiles", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserProfileRepository")
*/
class UserProfile
{
/**
* @ORM\Id
* @ORM\Column(name="user_id", type="integer")
* @ORM\OneToOne(targetEntity="User", mappedBy="id")
*/
private $userId;
...
我已经尝试清除缓存了。
更新#1
user.php的
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\OneToOne(targetEntity="UserProfile", mappedBy="userId")
*/
private $id;
UserProfile.php
/**
* @ORM\Id
* @ORM\Column(name="user_id", type="integer")
* @ORM\OneToOne(targetEntity="User", inversedBy="id")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $userId;
答案 0 :(得分:0)
inversedBy引用属性,而不是数据库字段。
将inversedBy="user_id"
更改为inversedBy="userId"
您还应该根据文档使用JoinColumn而不是Column和referencedColumnName:
答案 1 :(得分:0)
这里有几个选项,如果你想要双向关联,这意味着你希望能够从其中任何一个访问另一个实体,那么你会想要使用另一个属性(不是{{1}完成这个。类似的东西:
$id
然后在UserProfile.php
中/**
* @ORM\Table(name="users", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="UserProfile", mappedBy="userId")
*/
private $profile;
...
}
这样您就可以/**
* @ORM\Table(name="users_profiles", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserProfileRepository")
*/
class UserProfile
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="profile")
* @ORM\JoinColumn(name="userId", referencedColumnName="id")
*/
private $user;
...
}
和$userProfile->getUser()
。
如果要将userId用作UserProfile表的主键,则只需要进行更多工作来设置它,您必须在应用程序中明确设置它。更容易在另一个领域引用它。
<强>单向强>
user.php的
$user->getProfile()
UserProfile.php
/**
* @ORM\Table(name="users", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
}
这只允许你/**
* @ORM\Table(name="users_profiles", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserProfileRepository")
*/
class UserProfile
{
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="profile")
* @ORM\JoinColumn(name="userId", referencedColumnName="id")
*/
private $user;
...
}
。可能不是你想要的。另一个单向解决方案是从用户对象到UserProfile,如下所示:
$userProfile->getUser()
然后在UserProfile.php
中/**
* @ORM\Table(name="users", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
*/
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="UserProfile", mappedBy="id")
*/
private $profile;
...
}
这样您就可以/**
* @ORM\Table(name="users_profiles", options={"charset":"utf8mb4", "collate":"utf8mb4_unicode_ci"})
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserProfileRepository")
*/
class UserProfile
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
}
。