Может войдёшь?
Черновики Написать статью Профиль

По вашим заявкам - Начинаем работать с Eloquent

перевод

Есть множество вещей в Laravel Eloquent ORM, но чтобы начать этот цикл статей, мы начнем с самого начала и рассмотрим, как загружаются и конструируются модели Eloquent.

В этом руководстве мы будем использовать для примера такую модель.

PHP
class Post extends Eloquent
{
    
$fillable = ['title''content'];
}

Такой выбор связан с тем, что пока мы рассматриваем только стандартное поведение Eloquent, перед тем как начнем что-либо модифицировать.

Сейчас мы рассмотрим, что происходит при вызове PHPnew Post(['post.title' => 'First Post''content' => 'lorem']).

Сначала мы попадаем в PHP__construct. Первое что мы проверим — это проверяет ли эта модель, была ли она загружена. Для этого она проверяет статическое свойство PHPbooted родительского класса Eloquent по ключу массива, в нашем случае это Post. Мы впервые сконструировали экземпляр нашей модели Post, далее нам надо ее загрузить, вызвав метод PHPboot.

Теперь в PHPboot нам надо сделать несколько небольших хитростей.

По существу, PHPboot проходит через модель Post и находит все мутаторы, используя регулярные выражения, и сохраняет их в PHPthemutatorCache в Eloquent в массиве с ключом Post. Затем мы идем дальше и устанавливаем PHPbooted['Post'] в PHPtrue, поэтому нам не придется делать это снова в следующий раз, когда нам понадобиться экземпляр Post.

Наконец, в самом конструкторе мы только вызываем PHPfill с атрибутами, передаваемыми конструктору. В PHPfill мы пройдем по каждому из наших атрибутов и сделаем следующее. Сначала мы проверим, используется ли в атрибуте точечный синтаксис для ключа. Это нужно для того, чтобы удалить все возможные имена таблиц, такие как post.title, и заменить их на title. Теперь мы проверим, разрешено ли атрибуту массовое назначение (mass assigment), с помощью вызова PHPisFillable.

В PHPisFillable мы проверяем несколько разных способов, которыми может быть обработано массовое назначение. Сначала мы смотрим, установлена ли модель как PHPunguarded, и если это так, то разрешаем назначение. Далее мы проверяем, находится ли атрибут в массиве PHPfillable, тогда мы разрешаем назначение еще раз. Затем вызывается PHPisGuarded, который проверяет, находится ли ключ в массиве PHPguarded, или PHPguarded содержит знак звездочки PHParray('*') (который ставится по умолчанию), тогда мы не разрешаем массовое назначение. Наконец, если PHPfillable пустой, мы возвращаем PHPtrue, если ключ не начинается с подчеркивания, которое используется для скрытых атрибутов, как это принято и в Rails.

Если находится PHPunfillable-ключ, то мы проверяем, является ли модель PHPtotallyGuarded. По сути это значит, что если PHPfillable пустой и PHPguarded содержит знак * (по умолчанию), тогда возникает исключение PHPMassAssignmentException. Это значит, что если вы не измените свойства PHPfillable или PHPguarded, то при попытке вызвать PHPfill будет возникать исключение PHPMassAssignmentExceptions.

Но если мы разрешим заполнение атрибута, то нам надо сделать PHPsetAttribute. Здесь мы проверяем мутаторы в PHPmutatorCache, о котором говорилось выше. Если есть совпадение, то мы вызываем этот мутатор, который может содержать любую нужную нам логику. Далее мы проверяем, есть ли ключ в массиве PHPdates. Если так, то мы задаем значение экземпляру PHPCarbon, который является мощным расширением PHP-объекта Date. В конце мы задаем значение ключу в массиве PHPattributes.

Наконец, мы возвращаем этот экземпляр пользователю, и наша модель Eloquent полностью загружена. Примечание: конструктор никак не затрагивает отношения, базу данных или изменение данных.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.