将数据从数据库获取到模型

时间:2014-07-31 12:43:18

标签: php database oop

到目前为止,我已经在我的应用程序中使用了很多对象,但是如果我不得不例如显示用户的话。页面上的配置文件我只是使用我的对象中的某个方法将数据库中的20个用户作为数组,并将其分配给查看。

现在我想用表示真实数据的模型更多地创建应用程序。因此,对于每个用户,我应该拥有带有属性的User对象。

这里我放置示例代码以从数据库中获取用户并在PHP中显示它们:

<?php

$db = new mysqli('localhost', 'root', '', 'mytest');

class User
{
    private $id;
    private $name;

    public function __construct($data)
    {
        foreach ($data as $k => $v) {
            if (property_exists($this, $k)) {
                $this->$k = $v;
            }

        }
    }
    public function show()
    {
        return $this->id . ' ' . $this->name ;
    }
}

$result = $db->query("SELECT * FROM `user` LIMIT 20");

$users = array();
while ($data = $result->fetch_object()) {
    $data->x = 10; // just to test if property isn't created
    $users[] = new User($data);
}

// displaying it on page
foreach ($users as $user) {
    echo $user->show() . "<br />";
}

问题

  1. 这是我应该将数据库中的数据用于模型的方式吗?我的意思是,如果我应该为每个记录创建对象,即使该对象的唯一角色是返回一些数据进行查看(例如,即使没有像本示例中的任何函数那样修改)。当然,我知道通常数据应该准备好显示或进行一些计算,或者在用这些数据显示之前应该从数据库中检索其他数据。

  2. 有没有办法从数据库中分配对象属性比使用带循环的构造函数更简单?

1 个答案:

答案 0 :(得分:0)

首先,我将DB操作移到一个单独的类中,而不是与User类内联。您可以创建一个抽象的Model类,User类将扩展它并向其添加DB逻辑。

您有一个select()方法来查询数据库,该方法将返回扩展Model类的类的对象数组(在本例中为User类)。

回答你的问题:

  1. 我认为没关系。大多数ORM以这种方式工作。
  2. 另一种方法是将用户行数据从DB分配到User类中的$ data属性,并使用魔术方法__get和__set来访问它们。