Тема
Данные, модель и миграция
Пока задачи написаны прямо в шаблоне, они исчезают при изменении кода. Для настоящего списка нужна таблица базы данных и модель.
Три разные части
| Часть | Роль |
|---|---|
| Миграция | Создаёт и изменяет структуру таблицы |
Модель Task | Даёт коду понятный способ работать с задачей |
Таблица tasks | Хранит отдельные записи |
Шаг 1. Создать модель с миграцией
bash
php artisan make:model Task -mФлаг -m просит создать миграцию вместе с моделью. Команда создаёт каркас, но не меняет базу.
Шаг 2. Описать таблицу
В методе up новой миграции:
php
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->boolean('is_done')->default(false);
$table->timestamps();
});Для первого проекта достаточно названия, признака выполнения и времени создания. Не добавляйте поля «на будущее» без задачи.
Шаг 3. Настроить модель
php
class Task extends Model
{
protected $fillable = ['title', 'is_done'];
protected function casts(): array
{
return ['is_done' => 'boolean'];
}
}$fillable ограничивает поля массового заполнения, а casts превращает значение базы в логическое true или false.
Шаг 4. Применить миграцию только в безопасной среде
Перед командой проверьте подключение. В учебной локальной среде:
bash
php artisan migrateНе запускайте миграции на боевом сервере как часть урока. Команды migrate:fresh и db:wipe удаляют данные и здесь не нужны.
Шаг 5. Передать задачи в шаблон
php
public function index()
{
return view('tasks.index', [
'tasks' => Task::query()->latest()->get(),
]);
}Шаблон может показать список и отдельное пустое состояние.
Шаг 6. Обновить тест
Тест должен создать задачу в тестовой базе, открыть страницу и увидеть её название. Проект обычно использует RefreshDatabase, чтобы каждый сценарий начинался с чистого тестового состояния.
Не смешивайте базы
Перед тестом убедитесь, что тестовое окружение не указывает на базу с настоящими данными. Если это невозможно доказать, тест с изменением базы не запускайте.
Попробуйте сейчас
До команды migrate попросите Codex перечислить, какие таблицы изменит новая миграция, не выполняя её. Сравните ответ с методом up.
Урок пройден, если
Вы можете объяснить разницу между моделью, миграцией и таблицей, а тест видит созданную в тестовой базе задачу.
Куда дальше
Научитесь давать Codex маленькие проверяемые задания.