如何从数据库中检索数据作为对象?

时间:2014-06-21 10:47:21

标签: php oop

在Lynda.com PHP与MySQL Beyond the Basics中,作者Kevin Skoglund介绍了这些方法作为从数据库中检索数据作为对象的方法:

    public static function find_by_id($id)
    {
        global $database;
        $id = $database->escape($id);
        $result_array = static::find_by_sql("SELECT * FROM " . static::$table_name . " WHERE id = {$id} LIMIT 1");
        return !empty($result_array) ? array_shift($result_array) : false;
    }

    public static function find_by_sql($sql)
    {
        global $database;
        $result_set = $database->query($sql);
        $object_array = array();
        while ($row = $database->fetch_array($result_set))
        {
            $object_array[] = static::instantiate($row);
        }

        return $object_array;
    }

    protected static function instantiate($record)
    {
        $class_name = get_called_class();
        $object = new $class_name();
        foreach ($record as $attribute => $value)
        {
            if ($object->has_attribute($attribute))
            {
                $object->$attribute = $value;
            }
        }
        return $object;
    }

例如,在用户类中使用它的一个例子是:

$user = User::find_by_id(1);
echo $user->first_name;

我的问题是,如果我有一个帖子表,例如,一个名为“user”的列作为外键,我尝试使用上述方法检索帖子,那么user属性只是一个数字< / p>

$post = Post::find_by_id(1);
echo $post->user; // This will return the id of the user

但是,我希望能够做到这样的事情:

echo $post->user->first_name;

我怎样才能完成这样的事情?它会涉及使用JOIN吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

阅读本文档。该页面解释了对象之间的映射关联。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html