Хорошо, так что все решили (и не без оснований), что прямой SQL - от дьявола. Это оставляет нам много способов размещения «посредника» в нашем коде для отделения нашего кода от базы данных. Теперь я собираюсь выкладывать всю информацию, которую я собрал, в надежде, что кто-то может заставить меня выйти из строя и рассказать мне, что я построил.
ORM (объектно-реляционное отображение) - это набор инструментов (слабо или тесно связанных друг с другом), которые отображают строки базы данных в объекты приложения.
В AR (Active-Record) - это тип ORM, в котором таблица или представление базы данных заключено в класс, поэтому экземпляр объекта привязан к одной строке в таблице.
Отображение данных (DM) - это тип ORM, который представляет собой процесс создания отображений элементов данных между двумя различными моделями данных.
Все три утверждают, что работают так:
$user = new User();
$user->name = 'Fred';
$user->save();
Обычно с классом User что-то вроде этого:
class User extends Model {
// Specify the database table
protected $table = "users";
// Define your fields
protected $fields = array(
'id' => array('type' => 'int', 'primary' => true),
'name' => array('type' => 'string', 'required' => true),
'email' => array('type' => 'text', 'required' => true)
);
}
С этой настройкой вы можете легко извлекать строки без необходимости писать SQL.
// users
$users = $user->fetch(array('id' => 3));
Некоторые классы AR на самом деле выглядят так:
$db->where('id' => 3);
$db->join('posts', 'posts.user_id = users.id');
$results = $db->get('users');
Хорошо, теперь это место, где становится волосатым. Кажется, что у каждого и его брата разные взгляды на то, какой тип кода падает. Хотя большинство согласны с тем, что AR или DM - это тип ORM, но иногда линии, которые сообщают AR от DM, кажутся размытыми.
Я написал класс, который использует один объект ($ db), в котором вы делаете вызовы для этого объекта, и он обрабатывает создание SQL для сохранения / извлечения результатов.
//Fetch the users
$results = $db->select('id, name')->where('id > 4')->get('users');
//Set them active
while($user = $results->fetch()) {
$user->active = TRUE;
$user->save();
}
Итак, вопрос «что это?», И почему люди не соглашаются с этими условиями?