Комментарии 7
> Eloquent-модели, которые будут выполнены при ее загрузке
Это не совсем верно, boot-методы (обычный и для трейтов) вызываются только один раз для модели, а не при каждом инстанциировании.
Это не совсем верно, boot-методы (обычный и для трейтов) вызываются только один раз для модели, а не при каждом инстанциировании.
0
> Это не совсем верно, boot-методы (обычный и для трейтов) вызываются только один раз для модели
В тестовом окружении метод boot вызывается только для самого первого юнит-теста. В остальных — просто игнорируется. Так что предлагаю быть с ними (с методами boot) аккуратнее.
В тестовом окружении метод boot вызывается только для самого первого юнит-теста. В остальных — просто игнорируется. Так что предлагаю быть с ними (с методами boot) аккуратнее.
0
> В остальных — просто игнорируется
1. Поведение этого механизма не зависит от окружения.
2. Вызывается не для первого юнит-теста, а для первого созданного объекта модели.
По крайней мере в 4 версии это так:
1. Поведение этого механизма не зависит от окружения.
2. Вызывается не для первого юнит-теста, а для первого созданного объекта модели.
По крайней мере в 4 версии это так:
код Model
public function __construct(array $attributes = array())
{
$this->bootIfNotBooted();
$this->syncOriginal();
$this->fill($attributes);
}
/**
* Check if the model needs to be booted and if so, do it.
*
* @return void
*/
protected function bootIfNotBooted()
{
$class = get_class($this);
if ( ! isset(static::$booted[$class]))
{
static::$booted[$class] = true;
$this->fireModelEvent('booting', false);
static::boot();
$this->fireModelEvent('booted', false);
}
}
0
А внутри TestCase setUp метод релоада приложения, который уничтожает все данные (в т.ч. создаёт новый объект эвент листнера, если в boot прописан, например `static::updated` — его не будет в следующем тесте), но оставляет булев `booted`. Так что во втором+ тесте вызов не производится.
Верное замечание, что не зависит от окружения. Просто тестирование реализовано так, что boot нормально не работает и можно получить себе граблями в лоб.
Верное замечание, что не зависит от окружения. Просто тестирование реализовано так, что boot нормально не работает и можно получить себе граблями в лоб.
+1
*промахнулся веточкой*
0
Эм… работа моделей в ларе — это повод для дискуссии, но вряд ли для поста на хабр. Да еще и такой короткий… Да еще и перевод… плохой выбор, в общем.
0
Он даже не написал как перегружать атрибуты класса Eloquent/Model и самих моделей.
сорян за некропостинг — но это лажа а не статья.
сорян за некропостинг — но это лажа а не статья.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Загрузка моделей, трейтов