0

2つのエンティティを接続しようとしていますが、問題が発生しています。ユーザーと性別の2つのクラスがあります。各ユーザーは、親切な性別(男性または女性)の出身です。私のデータベースには、この構造の2つのテーブルがあります。

 user(**id**, firstName, gender);
 gender(**id**, type);

これで、システムに2つのエンティティを作成しました。User.phpおよびGender.php

ユーザー

<?php  

/**
 * @Entity @Table(name="User")
 **/

class User
{
/**
 * @Id @Column(type="integer") @GeneratedValue
 **/  
private $id;

 /**
 * @Column(type="string")
 **/
private $firstName;

 /**
 * @Column(type="string")
 * @ManyToOne(targetEntity="Gender")
 * @JoinColumn(name="type", referencedColumnName="type")
 * @var Gender[]
 **/
private $gender;

 
public function __construct($content) {
    $this->setContent($content);
}   


/**
 * @return int
 */
public function getId() {
    return $this->id;
}
 
/**
 * @return string
 */
public function getFirstName() {
    return $this->firstName;
}

  /**
 * @return int
 */
public function getGender() {
    return $this->gender;
}
 
 

/**
 * @param string $content
 */
public function setFirstName($content) {
    $this->firstName = (string) $content;
}

/**
 * @param string $content
 */
public function setGender($content) {
    $this->gender = (string) $content;
}
 
}

性別

<?php  

/**
 * @Entity @Table(name="Gender")
 **/

class Gender
{
/**
 * @Id @Column(type="integer") @GeneratedValue
 **/  
private $id;

 /**
 * @OneToMany(targetEntity="User", inversedBy="gender")
 * @JoinColumn(name="gender", referencedColumnName="gender")
 * @Column(type="string")
 **/
private $type;


/**
 * @param integer $content
 * 
 */
public function getId() {
    return $this->id;
}

/**
 * @param string $content
 * 
 */
public function getType() {
    return $this->type;
}


/**
 * @param string $content
 */
public function setGender($content) {
    $this->gender = (string) $content;
}
 
}

ユーザーを取得するときに性別タイプを取得する必要があるため、両方のエンティティを性別タイプの属性で接続する必要があります。@ManyToOneまたは@JoinColumn機能を使用してこれを実行しようとしましたが、取得できませんでした。

どうすればいいですか?私が間違っていることは何ですか?ありがとう!

4

3 に答える 3

0

ユーザークラスでこれを置き換えます。

* @JoinColumn(name="type", referencedColumnName="type")

それと :

 * @JoinColumn(name="gender", referencedColumnName="type")

フィールド名は性別であり、ユーザーテーブルに入力するのではありません。

性別クラスでのみ使用:

 * @OneToMany(targetEntity="User", mappedBy="gender")
于 2012-07-18T18:25:38.000 に答える
0

的外れかもしれませんが、性別表は役に立ちません。常に 2 つ (男性/女性) しかないので、これを行う意味はありません。

User テーブルに新しい列 type=integer を作成し、性別に 0/1 を使用する必要があります。次のような定数を使用します

Class User
{
   const MALE=0 ;
   const FEMALE=1 ;

  .... ORM definition...

 public function isMale()
 {
     return $this->getGender() == self::MALE ;
 }

そしてコントローラーで:

if ( !$user->isMale() ) {
    .... buy shoes ....
} else {
    .... buy beer ....
}

または類似。オプションが 2 つしかないため、必要な機能は 1 つだけです。

于 2012-07-19T07:40:27.543 に答える
0

クエリからifを取得したい場合は、性別関係に参加する必要があります。

$dql = "SELECT a,g FROM user a LEFT JOIN a.gender g";
$query = $em->createQuery($dql);
$query->setMaxResults(30);
$users = $query->getResult();
于 2012-07-19T17:00:03.577 に答える