Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Основные концепции

Это обзорный урок, который показывает общие концепции присущие ORM. Каждая из этих концепций рассматривается дальше в курсе

ORM (Object-Relation Mapping) – общее название для фреймворков, позволяющих автоматически связать базу данных с кодом. Они стараются скрыть существование базы данных настолько, насколько это возможно. Взамен, программисту дают возможность оперировать данными в базе через специальный интерфейс. Вместо построения SQL-запросов, программист вызывает простые методы, а всю остальную работу берёт на себя ORM.

<?php

$user = new App\User();
$user->name = 'Petr';
$user->save(); // сохранение пользователя в базу

Несмотря на общую цель, ORM бывают очень разными. Eloquent относится к наиболее распространённому и простому типу ORM, реализующему шаблон проектирования Active Record. Этот шаблон базируется на идее, что каждой таблице в приложении соответствует один класс (модель). Этот класс отвечает как за реализацию бизнес логики, так и за взаимодействие с базой данных. Последнее обычно появляется в модели за счёт наследования от базового класса ORM.

Модель

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // Благодаря метапрограммированию, модель требует минимум движений для связи с таблицей
    // Даже пустая модель работоспособна.
    // У неё появляются свойства, её можно загружать из базы и сохранять
}

Каждый объект данного класса соответствует одной записи из этой таблицы. За преобразования данных в объекты и обратно, отвечает ORM. Программисту лишь нужно использовать правильные методы для извлечения объектов и их модификации.

<?php

// Поиск пользователя по идентификатору
$user = App\User::find(1);

// Обновление пользователя
$user->nickname = 'cooler';
// Сохранение в базу
$user->save();

// Удаление записи в базе данных
$user->destroy();

// Общее число пользователей
// SELECT COUNT(*) FROM users;
App\User::count();

Выборки

Важная часть любой ORM — это Query Builder (построитель запросов). Это абстракция поверх SQL, которая упрощает генерацию запросов. Она обычно выглядит как цепочка функций, каждая из которых отвечает за конкретную часть SQL, например: ORDER, SELECT или WHERE.

<?php

$users = App\User::where('state', 'active')
  ->orderBy('name', 'desc')
  ->take(10)
  ->get();

В тех случаях, когда этого языка недостаточно или запрос слишком сложный, ORM позволяет выполнять запросы напрямую:

<?php 

// Такой запрос нужно делать через билдер, но для демонстрации можно и так
$users = DB::select('select * from users where active = ?', [1]);

Схема

Ещё одна обязанность ORM – изменение схемы базы данных: добавление, удаление и модификация таблиц. Делается это, как правило, не на чистом SQL, а с помощью специального языка. Это позволяет работать с ORM не отвлекаясь на особенности конкретных баз данных. ORM сама создаёт правильный SQL-запрос, подходящий под конкретную базу данных:

<?php

Capsule::schema()->create('users', function ($table) {
    $table->bigIncrements('id');
    $table->string('email')->unique();
    $table->string('first_name');
    $table->string('password');
    $table->string('last_name');
    $table->timestamps();
});

В Eloquent используется подход Database First. Это значит, что для создания новых моделей или изменения поведения старых, нужно сначала изменить базу данных.

Миграции

Любая база данных в процессе жизни приложения изменяется. В неё добавляются новые таблицы, удаляются старые, какие-то меняются. Этот процесс никогда не заканчивается. Изменения в базе данных выполняются с помощью механизма миграций. Миграция это, обычно, файл, который содержит SQL, меняющий текущую схему базы данных.

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration
{
    // Выполнится при накатывании
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->text('body');
            $table->timestamps();
        });
    }

    // Выполнится при откатывании
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

Когда этот файл создан, то происходит процесс, который называют "применением миграций" (нередко ещё говорят: "я накатил миграции"). Он выполняется с помощью утилиты командной строки. В Laravel это выглядит так:

$ php artisan migrate

В процессе выполнения этой команды, автоматически проверяются, какие миграции были уже применены, а какие — нет. Применяются только те миграции, которые ещё не выполнены на текущей базе данных.


<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят менторы из команды Хекслета или другие студенты.

Для полного доступа к курсу, нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».