#php #oop
#php #ооп
Вопрос:
В Lynda.com PHP с MySQL Помимо основ, автор Кевин Скоглунд представил эти методы как способ извлечения данных из базы данных в виде объектов:
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» в качестве внешнего ключа, и я пытаюсь получить сообщение, используя вышеупомянутый метод, атрибутом пользователя будет просто число
$post = Post::find_by_id(1);
echo $post->user; // This will return the id of the user
Тем не менее, я хочу иметь возможность делать что-то вроде этого:
echo $post->user->first_name;
Как я могу выполнить что-то подобное? Будет ли это связано с использованием объединений? Заранее спасибо.
Комментарии:
1. вы хотите, например, ORM .. checkout Doctrine или Propel
2. Я хочу создать что-то простое для себя с целью обучения.
Ответ №1:
Прочитайте эту документацию. На этой странице объясняется сопоставление связей между объектами.
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html