2012-07-18 37 views
0

我想連接2個實體,我遇到了麻煩。 我有兩個類:用戶和性別。 每個用戶來自同一性別(男性或女性)。在我的數據庫中,我有兩個這種結構的表格:創建實體之間的關聯原則2

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

現在我在我的系統中創建了兩個實體。 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功能,但我無法得到它。

我該怎麼辦?我做錯了什麼? 謝謝!

回答

0

在用戶級替換此:

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

與:

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

你的字段名是性別,而不是鍵入用戶表。

在只有性別類用途:

* @OneToMany(targetEntity="User", mappedBy="gender") 
+0

我已經做到了,但是......我應該在哪裏得到性別類型?在獲取數據後:$ dql =「選擇一個FROM用戶a」; $ query = $ em-> createQuery($ dql); $ query-> setMaxResults(30); $ users = $ query-> getResult(); 如果我做一個print_r($ users);我不明白。 – Alvaro 2012-07-18 18:30:22

+0

對不起,我編輯了這篇文章。 – 2012-07-18 18:31:23

+0

我已經做到了,但現在...我在哪裏看到類型數據?我不明白它的$ users變量。我如何訪問Gender類數據? – Alvaro 2012-07-18 18:53:46

0

可能offtopic但性別表是沒用的。你永遠只有2(男/女),所以沒有點這樣做。

您應該在用戶表中創建新列,鍵入= 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個選項,所以只需要一個功能。

+0

我設計的系統更模塊化,可擴展。如果我想添加或更改性別的名稱,或者添加描述或其他任何內容到該表中,最好將它放在其他表中。 – Alvaro 2012-07-19 10:48:32

0

如果你想從查詢中獲得,你必須加入性別關係。

$dql = "SELECT a,g FROM user a LEFT JOIN a.gender g"; 
$query = $em->createQuery($dql); 
$query->setMaxResults(30); 
$users = $query->getResult(); 
相關問題