1

我的数据库用户和 users_roles 中有 2 个表,如下所示:

用户:

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

用户角色:

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

因此,在 Java 中,我只需要在 Hibernate 映射中编写一个属性lazy="false" 来获取所有users自动包含users_roles对象的列表,每个对象都专门针对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}

你介意帮我一点点走上正确的道路吗?

4

3 回答 3

1

Java 中 PDO 的等价物是 JDBC:您有语句和结果集,而不是业务对象。Hibernate 是一个对象关系映射 (ORM) 库,它允许将表映射到业务对象。

PHP 有几个 ORM,例如DoctrinePropel。在网上搜索“PHP ORM”。

或者您可以使用纯 SQL,自己编写JOINWHERE条件。

于 2013-08-02T08:06:46.027 回答
1

除非您使用的是CakePHPYii等 PHP 框架,否则您必须创建自己的查询来获取相关数据。

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

之后,您可以获取记录并在代码中使用它们。

于 2013-08-02T08:07:04.630 回答
1

FETCH_ASSOC 选项将行提取到关联数组中,例如:

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

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

如果你想 top 获取所有在 users_roles 表中有相应记录的用户,你可以使用这个请求:

SELECT 
    *
FROM
    users
INNER JOIN
    users_roles
ON
    users_roles.id=users.user_role_id
ORDER BY
    users.id DESC
于 2013-08-02T08:08:34.603 回答