У меня есть две таблицы базы данных:
Места
идентификатор
имя
Пользователи
идентификатор
LOCATION_ID
last_name
first_name
У меня также есть Пользователь и Класс местоположения , они оба расширяют Модель и содержат некоторые пользовательские методы. Например, в классе Пользователь существует метод get_full_name () .
Я использую следующие коды для загрузки данных,
$this->db->select('users.id, locations.name as location_name, users.last_name, users.first_name');
$this->db->from('users');
$this->db->join('locations', 'users.location_id = location.id');
$query = $this->db->get();
$users= $query->custom_result_object('User'); //now $users is an array of User object
custom_result_object - это встроенная, но недокументированная функция в Codeigniter. Он принимает строку с именем класса и будет использовать ее для создания объектов этого класса.
С помощью вышеуказанных кодов я могу получить доступ к таким данным,
foreach($users as $user)
{
echo $user->id;
echo $user->get_full_name();
echo $user->location_name;
}
Но, как вы можете видеть, location_name теперь является полем объекта Пользователь , я хочу, чтобы объект Пользователь имел поле Местоположение объект что позволяет мне использовать это так,
foreach($users as $user)
{
echo $user->id;
echo $user->get_full_name();
echo $user->location->name; // Location is an object
}
Я не хочу использовать DataMapper ORM или любые другие ORM, а также хотел бы избежать проблемы производительности запросов N + 1.
Как я могу сделать это с минимальным количеством кодов?
Примечание: я создал этот пример только для демонстрации, в моем реальном случае довольно много таблиц и классов (для которых определены пользовательские методы).
Большое спасибо всем вам.