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

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

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

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

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

Модель

Модель — это воплощение понятия предметной области в коде приложения. В Eloquent каждая модель представлена классом в коде и таблицей в базе данных:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
}
  1. Модель = Класс только в классовых языках. Чисто технически она может быть чем угодно, это зависит от языка.
  2. Связь Модель-Таблица — это особенность паттерна Active Record. В другом подходе, называемом Data Mapper, всё может быть по другому.

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

# Laravel
$ php artisan make:model User

В нашем же случае используется файл src/schema.php, в котором есть определение таблицы:

<?php

Capsule::schema()->create('users', function ($table) {
    $table->id();
    $table->string('email')->unique(); // уникальный индекс
    $table->string('first_name')->nullable(); // может быть пустым
    $table->string('last_name')->nullable(); // может быть пустым
    $table->string('password')->nullable();
    $table->timestamps();
});

Этого описания достаточно для начала работы. Теперь можно создавать сущности, сохранять их в базу и обновлять:

<?php

$user = new App\User();
// Кажется, что это свойство, но на самом деле это магический метод __set
$user->email = 'user@email.com';
// Такое именование не соответствует стандарту PSR12, но таковы стандарты Eloquent
$user->first_name = 'Pedro';
$user->last_name = 'Rodriges';
// Пароли нельзя хранить в открытом виде
$user->password = password_hash('rasmuslerdorf', PASSWORD_DEFAULT);

$user->save(); // INSERT (добавление новой записи)

$user->email = 'pedro@hotmail.com';
$user->save(); // UPDATE (обновление существующей записи)

// Выводит содержимое объекта
print_r($user->toArray());
// [
//    "email" => "pedro@hotmail.com",
//    "first_name" => "Pedro",
//    "last_name" => "Rodriges",
//    "password" => "$2y$10$jpJD6FlPp0bQFXF3rxFUTu6p.wxnbuxRE803cTdfeqAsqEtJbikp.",
//    "updated_at" => "2019-08-23 02:33:50",
//    "created_at" => "2019-08-23 02:33:34",
//    "id" => 1,
//  ]

$user->delete(); // удаление пользователя

Этот код работает благодаря подходу "соглашения вместо конфигурации" (Convention Over Configuration). Нам не пришлось явно указывать имя таблицы, с которой связана модель. Eloquent автоматически получила её имя, выполнив приведение имени класса к нижнему регистру и сделав его во множественном числе.

Кроме того, Eloquent проанализировала структуру этой таблицы для определения первичного ключа, полей и их типов. Эта информация используется внутри модели для сохранения, обновления и загрузки данных в код. Из примера выше видно, что при создании или обновлении сущности, используется метод save(), а Eloquent сама распознает что сейчас происходит: создание или обновление.

После того как сущность сохранена в базу, её можно извлечь. Самый простой способ сделать это, воспользоваться статическим методом find($id). Он выполняет поиск по первичному ключу.

<?php

// Предположим, что запись с таким идентификатором есть в базе данных
$user = App\User::find(1);

// Если записи не существует, то вернётся null
App\User::find(100);

Самостоятельная работа

  1. Зайдите в REPL набрав make console.
  2. Создайте нескольких пользователей, обновите их.
  3. Переоткройте REPL и извлеките сущности из базы данных.
  4. Удалить часть сущностей.

<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

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

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

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