HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><em>Это обзорный урок, который показывает общие концепции присущие ORM. Каждая из этих концепций рассматривается дальше в курсе</em></p>
1 <p><em>Это обзорный урок, который показывает общие концепции присущие ORM. Каждая из этих концепций рассматривается дальше в курсе</em></p>
2 <p>ORM (Object-Relation Mapping) - общее название для фреймворков, позволяющих автоматически связать базу данных с кодом. Они стараются скрыть существование базы данных настолько, насколько это возможно. Взамен, программисту дают возможность оперировать данными в базе через специальный интерфейс. Вместо построения SQL-запросов, программист вызывает простые методы, а всю остальную работу берёт на себя ORM.</p>
2 <p>ORM (Object-Relation Mapping) - общее название для фреймворков, позволяющих автоматически связать базу данных с кодом. Они стараются скрыть существование базы данных настолько, насколько это возможно. Взамен, программисту дают возможность оперировать данными в базе через специальный интерфейс. Вместо построения SQL-запросов, программист вызывает простые методы, а всю остальную работу берёт на себя ORM.</p>
3 <p>Несмотря на общую цель, ORM бывают очень разными. Eloquent относится к наиболее распространённому и простому типу ORM, реализующему шаблон проектирования Active Record. Этот шаблон базируется на идее, что каждой таблице в приложении соответствует один класс (модель). Этот класс отвечает как за реализацию бизнес логики, так и за взаимодействие с базой данных. Последнее обычно появляется в модели за счёт наследования от базового класса ORM.</p>
3 <p>Несмотря на общую цель, ORM бывают очень разными. Eloquent относится к наиболее распространённому и простому типу ORM, реализующему шаблон проектирования Active Record. Этот шаблон базируется на идее, что каждой таблице в приложении соответствует один класс (модель). Этот класс отвечает как за реализацию бизнес логики, так и за взаимодействие с базой данных. Последнее обычно появляется в модели за счёт наследования от базового класса ORM.</p>
4 <p><em>Кроме Active Record существует шаблон Data Mapper, он например, реализован в Doctrine. Этот подход разделяет сущности и код, связанный с базой данных, на два независимых слоя. Такой подход гибче, но при этом сложнее в работе.</em></p>
4 <p><em>Кроме Active Record существует шаблон Data Mapper, он например, реализован в Doctrine. Этот подход разделяет сущности и код, связанный с базой данных, на два независимых слоя. Такой подход гибче, но при этом сложнее в работе.</em></p>
5 <h2>Модель</h2>
5 <h2>Модель</h2>
6 <p>Каждый объект данного класса соответствует одной записи из этой таблицы. За преобразования данных в объекты и обратно, отвечает ORM. Программисту лишь нужно использовать правильные методы для извлечения объектов и их модификации.</p>
6 <p>Каждый объект данного класса соответствует одной записи из этой таблицы. За преобразования данных в объекты и обратно, отвечает ORM. Программисту лишь нужно использовать правильные методы для извлечения объектов и их модификации.</p>
7 <h2>Выборки</h2>
7 <h2>Выборки</h2>
8 <p>Важная часть любой ORM - это Query Builder (построитель запросов). Это абстракция поверх SQL, которая упрощает генерацию запросов. Она обычно выглядит как цепочка функций, каждая из которых отвечает за конкретную часть SQL, например: ORDER, SELECT или WHERE.</p>
8 <p>Важная часть любой ORM - это Query Builder (построитель запросов). Это абстракция поверх SQL, которая упрощает генерацию запросов. Она обычно выглядит как цепочка функций, каждая из которых отвечает за конкретную часть SQL, например: ORDER, SELECT или WHERE.</p>
9 <p>В тех случаях, когда этого языка недостаточно или запрос слишком сложный, ORM позволяет выполнять запросы напрямую:</p>
9 <p>В тех случаях, когда этого языка недостаточно или запрос слишком сложный, ORM позволяет выполнять запросы напрямую:</p>
10 <h2>Схема</h2>
10 <h2>Схема</h2>
11 <p>Ещё одна обязанность ORM - изменение схемы базы данных: добавление, удаление и модификация таблиц. Делается это, как правило, не на чистом SQL, а с помощью специального языка. Это позволяет работать с ORM, не отвлекаясь на особенности конкретных баз данных. ORM сама создает правильный SQL-запрос, подходящий под конкретную базу данных:</p>
11 <p>Ещё одна обязанность ORM - изменение схемы базы данных: добавление, удаление и модификация таблиц. Делается это, как правило, не на чистом SQL, а с помощью специального языка. Это позволяет работать с ORM, не отвлекаясь на особенности конкретных баз данных. ORM сама создает правильный SQL-запрос, подходящий под конкретную базу данных:</p>
12 <p>В Eloquent используется подход Database First. Это значит, что для создания новых моделей или изменения поведения старых, нужно сначала изменить базу данных, а ORM сама подхватывает изменения и работает с ними. Например, для добавления нового свойства достаточно добавить новую колонку. В коде ничего менять не нужно, она автоматически начинает работать.</p>
12 <p>В Eloquent используется подход Database First. Это значит, что для создания новых моделей или изменения поведения старых, нужно сначала изменить базу данных, а ORM сама подхватывает изменения и работает с ними. Например, для добавления нового свойства достаточно добавить новую колонку. В коде ничего менять не нужно, она автоматически начинает работать.</p>
13 <p><em>В некоторых ORM встречается подход Code First. В таком случае изменения делаются не в базе, а в коде. А дальше ORM сама формирует необходимые изменения для базы данных, подстраивая ее под код</em></p>
13 <p><em>В некоторых ORM встречается подход Code First. В таком случае изменения делаются не в базе, а в коде. А дальше ORM сама формирует необходимые изменения для базы данных, подстраивая ее под код</em></p>
14 <h2>Миграции</h2>
14 <h2>Миграции</h2>
15 <p>Любая база данных в процессе жизни приложения изменяется. В неё добавляются новые таблицы, удаляются старые, какие-то меняются. Этот процесс никогда не заканчивается. Изменения в базе данных выполняются с помощью механизма миграций. Миграция это, обычно, файл, который содержит SQL, меняющий текущую схему базы данных.</p>
15 <p>Любая база данных в процессе жизни приложения изменяется. В неё добавляются новые таблицы, удаляются старые, какие-то меняются. Этот процесс никогда не заканчивается. Изменения в базе данных выполняются с помощью механизма миграций. Миграция это, обычно, файл, который содержит SQL, меняющий текущую схему базы данных.</p>
16 <p>Когда этот файл создан, то происходит процесс, который называют "применением миграций" (нередко еще говорят: "я накатил миграции"). Он выполняется с помощью утилиты командной строки. В Laravel это выглядит так:</p>
16 <p>Когда этот файл создан, то происходит процесс, который называют "применением миграций" (нередко еще говорят: "я накатил миграции"). Он выполняется с помощью утилиты командной строки. В Laravel это выглядит так:</p>
17 <p>В процессе выполнения этой команды, автоматически проверяются, какие миграции были уже применены, а какие - нет. Применяются только те миграции, которые еще не выполнены на текущей базе данных.</p>
17 <p>В процессе выполнения этой команды, автоматически проверяются, какие миграции были уже применены, а какие - нет. Применяются только те миграции, которые еще не выполнены на текущей базе данных.</p>