2013-08-02 55 views
1

我有2代表在我的數據庫用戶和users_roles,像這樣:獲取從MySQL中的所有記錄懶惰= 「假」 PHP

用戶:

id | username | user_role_id 
---------------------------- 
1 | User1 | 1 
2 | User2 | 1 
3 | User3 | 2 

users_roles:

id | role 
---------- 
1 | admin 
2 | user 

因此,在Java中,我只需在Hibernate映射中寫入一個屬性lazy =「false」,以獲得自動包含users_roles對象的所有users的列表,每個對象都專門針對每個對象在users表中,但在PHP?我剛剛在PDO中遇到了一個名爲FETCH_ASSOC的選項,但我無法理解它是如何工作的。

我得到的所有用戶列表的方法是這樣的:

public function getAll() { 

    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 

    $sql = $conn->prepare("SELECT * FROM users ORDER BY id DESC"); 

    $sql->execute(); 
    $list = $sql->fetchAll(PDO::FETCH_OBJ); 

    $conn = null; 

    return $list; 
} 

和Smarty模板的代碼段:

{foreach from=$usersList item=item}     
    {$item->username} 
    {$item->users_roles.role} 
{/foreach} 

你介意幫我一點點地得到正確的它的方式?

回答

1

FETCH_ASSOC選項獲取的行成一個關聯數組,如:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => name1 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => name2 
     ) 
) 

如果你想要得到最高的所有用戶,誰在users_roles表中的相應記錄,你可以用這個請求:

SELECT 
    * 
FROM 
    users 
INNER JOIN 
    users_roles 
ON 
    users_roles.id=users.user_role_id 
ORDER BY 
    users.id DESC 
+0

謝謝,我只需要添加'SELECT users。*,users_roles。*'。現在工作。 – Denees

+1

@DenisHoss웃對不起,我想,你只需要用戶數據。你可以在列規範中加入一顆星。 – user4035

+0

是的,但爲了更好的理解,我認爲它會更好,比如'users。*,users_roles。*'。不管怎樣,謝謝。 – Denees

1

Java中PDO的等價物是JDBC:你有語句和結果集,而不是業務對象。 Hibernate是一個對象關係映射(ORM)庫,允許將表映射到業務對象中。

PHP有幾種ORM,例如DoctrinePropel。在Internet上搜索「PHP ORM」。

或者您可以使用普通SQL,自己編寫JOINWHERE條件。

+0

謝謝,我會試試看。 – Denees

1

除非您使用的是諸如CakePHPYii之類的PHP框架,否則您將不得不創建自己的查詢來提取相關數據。

SELECT * FROM users 
LEFT JOIN users_roles ON users.user_role_id = users_roles.id 

之後,您可以獲取記錄並在您的代碼中使用它們。

+0

謝謝你 – Denees