отношения первичный / внешний ключ в доктрине - PullRequest
1 голос
/ 27 октября 2011

В моей базе данных mysql у меня есть две таблицы: «Пользователь» и «Пользовательский профиль». Таблица «UserProfile» имеет столбец внешнего ключа с именем «user_id», который ссылается на столбец «id» таблицы «User». Теперь, когда я генерирую все классы сущностей из моих таблиц БД с использованием doctrine, созданный класс «UserProfile» содержит свойство с именем «user» (тип «User») и не содержит никакого свойства с именем «user_id». Это нормально ?

Теперь, если я хочу найти профиль пользователя по идентификатору user_id, мне нужно написать что-то вроде этого:

$user_profile_repo = $this->em->getRepository("UserProfile");

$user_profile = $user_profile_repo->findOneBy(array("user_id"=>$id));

Но так как сгенерированный класс сущностей не включает свойство user_id, приведенный выше код не будет работать. Теперь мне нужно знать как я могу сделать твик, чтобы приведенный выше код работал, пожалуйста? Спасибо.

1 Ответ

1 голос
/ 27 октября 2011

фактические имена таблиц / столбцов в базе данных не очень важны. Вы можете установить их в комментариях.

это должно быть примерно так:

/**
 * models\User
 * @Table(name="User")
 * @Entity
 */
class User
{
    /**
     * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @Column(name="name", type="string", length=50, precision=0, scale=0, nullable=false, unique=false)
     */
    private $name;

    /**
     * @OneToOne(targetEntity="models\UserProfile", mappedBy="user")
     */
    private $profile;
}


/**
 * models\UserProfile
 * @Table(name="UserProfile")
 * @Entity
 */
class UserProfile
{
    /**
     * @OneToOne(targetEntity="models\User", inversedBy("profile"))
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;
}

в этом случае у пользователя есть идентификатор столбца, а у userprofile есть user_id

сгенерировав, вы должны получить в User метод getProfile (), а в UserProfile вы должны получить getUser ()

это похоже на 5.7 oneToOne двунаправленный: http://www.doctrine -project.org / docs / orm / 2.0 / en / reference / association-mapping.html

...