Как сделать модель laravel

Обновлено: 07.07.2024

protected $table = 'articles'; // указываем имя таблицы БД. Это необязательное свойство, если имя модели совпадает с именем таблицы.

public $incrementing = FALSE; // Автоинкремент.

public $timestamps = FALSE; // Если не нужно хранить дату создания и обновления.

Получим все статьи:
public function getArticles() <
$articles = Article::all();
dump($articles);
>

Метод all() возвращает коллекцию моделей. В свойстве attributes возвращаются наши поля из БД.

public function getArticles() <
$articles = Article::all();

// в цикле мы пройдемся по отдельным моделям
foreach($articles as $article) echo $article->name.'
';
>

dump($articles);
>
Выводит имена статей.

public function getArticles() <
$articles = Article::where('id', '>', 3)->get();

public function getArticles() <
$articles = Article::where('id', '>', 3)->orderBy('name')->take(2)->get();

public function getArticles() <
$articles = Article:: find( 1); // выборка записи с id = 1
echo $articles->text; // выводит текст записи
dump($articles);
>

public function getArticles() <
$articles = Article::where('id', 1)->first();
echo $articles->text;
dump($articles);
>
С методом find мы можем передать массив идентификаторов.

public function getArticles() <
$articles = Article::find([1,2,3]);

public function getArticles() <
$articles = Article:: findOrFail (1);

dump($articles);
>
Запрос: "select * from `articles` where `articles`.`id` = ? limit 1"

public function getArticles() <
$articles = Article::where('id', 1)-> firstOrFail() ;

public function getArticles() <
$article = new Article; // создадим объект новой модели
$article->name = 'New Article'; // запишем значение в поле имя
$article->text = 'New Article Text'; // запишем значение в поле text
$article->img = 'new.jpg';
$article-> save(); // сохраним данные в БД

$articles = Article::all(); // выберем все статьи
dump($articles);
>

Решили перенести проект с самописной платформы на нормальную. Был выбран Laravel.

Но имеется уже не малая база с достаточным количеством таблиц.

Существует ли способ создания моделей для Eloquent по существующей базе? Или все нужно создавать руками.

2 ответа 2

Есть на GitHub генератор моделей. Смотрите тут: Model Generator:

  • composer require ignasbernotas/laravel-model-generator
  • добавляете в провайдеры Iber\Generator\ModelGeneratorProvider
  • php artisan make:models
  • удаляете всё, что сделали выше либо посмотрите документацию

И улучшит поддержку в IDE.

Можно через Artisan создовать модели и контроллеры и многое другое! Допустим

это создаст модель

Есть другой вариант Онлайн рисуешь базу и скачиваешь папку уже с готовыми Контролерами, Моделями, Шаблонами и так далее ссылка

Начинаем работать с базой данных в Laravel 5.

Контроллер у нас уже есть, представление есть теперь нам нужна база данных, модель и наченем изучение.
Создадим новую базу данных. Название пусть будет laravel5, Character set = UTF8 Unicode, Collation = utf8_unicode_ci.

Теперь настроим фреймворк на работу с базой данных. В корне фреймворка есть файл .env. Здесь хранятся константы которые могут являться для нашего текущего сервера уникальными. Это настройки соединения с базой данных, настройки почты, кэша и тд.

Этот файл следует добавить в список игнорируемых для системы контроля версий. Так как на боевом сервере вероятнее всего настройки у вас будут иные.

Сейчас нас интересуют вот эти четыре строки:

Полагаю из названий констант вам уже всё понятно. Записываем сюда свои настройки подключения к БД.

Что нам требуется для начала работы с БД? Нам нужна Модель, нам нужна миграция - для создания новой таблицы в базе, и нам нужны Seeds - тестовые записи для обучения.

Миграции нам нужны для создания новых таблиц, модификации таблиц и удаления таблиц. И первое что приходит в голову для решения поставленной задачи - создать номый файл миграции для того чтобы создать новую таблицу в базе данных.
Мы поступим немного иначе - создадим Модель. Когда мы создаем модель, то файл миграции создается автоматически.

Создаем модель следующий командой:

php artisan make:model Post

Наша будущая таблица для хранения статей будет называться Posts, а модель же, в единственном числе, Post. Почему так? Да хотя бы потому что такой способ именования уже используется в ларавел (смотрим авторизацию - User). Будем придерживаться заведенного правила. Ну а если у вас иные предпочтения - вы можете называть как вам угодно.

После выполнения команды выше у нас содается модель - app/Post.php и файл миграции - database/migrations/ _create_post.php

Файл модели у нас пуст (объявлен лишь класс), а файл можели уже имеет два метода и в них уже есть код.
Здесь мы имеем два метода - up() - с помощью этого метода выполняется создание (модификация и тп) таблицы, и метод down() - откат изменений.

Запишем в метод up() следующий код

Открываем терминл в phpStorm и выполняем следующую команду:

php artisan migrate

После успешного выполнения в нашей БД создадутся четыре таблицы. Таблица migrations является рабочей таблицей фреймворка - трогать ее не надо. Две другие таблицы относятся к работе с пользователями. И последняя наша таблица Posts.

Модель в MVC v2 – это слой приложения, отвечающий за связь с предметной областью. В нём находится вся бизнес-логика приложения. Для простоты реализации, сюда часто включают механизмы для работы с базой данных.

В том числе это значит, что мы можем работать с моделями вне фреймворка. В этом нам поможет Tinker. Одна из самых полезных возможностей Tinker – загрузить приложение и "поиграться" с моделями, поисследовать базу данных.

Текущая версия Tinker не умеет подтягивать изменения файлов в репл. Поэтому если вы что-то меняете в коде, с которым работаете в репле, придётся его перезапускать.

Выполним полный пример, создадим новую статью, наполним её данными и сохраним в базе:

Когда объект готов, его можно сохранить в базу данных. Для этого надо вызвать метод save() :

Этот метод делает запрос INSERT в базу данных. Затем он обновляет сам объект:

  • Внутрь записывается идентификатор статьи взятый из базы данных.
  • Заполняются поля created_at и updated_at. Если это новая запись, то значения этих полей совпадают.

Созданный объект можно тут же поменять:

Изменение свойств никак не затрагивает базу данных. Все это происходит только на уровне самого объекта. Если в этот момент закрыть консоль, то все изменения потеряются. Для сохранения нужно опять вызвать save() . Этот метод универсальный, он подходит как для создания новой сущности, так и для её обновления.

Метод save() выполняет запрос в базу только тогда, когда что-то поменялось. В этом случае обязательно меняется значение поля updated_at. Оно становится равным текущему времени.

Теперь предположим, что у нас нет переменной с текущей статьёй. Например, мы перезапустили консоль. Каким образом получить нужный объект? Делается это с помощью статических методов, которые появляются у каждой модели. Самый простой способ достать запись, сделать поиск по её идентификатору:

find ищет по первичному ключу и возвращает запись или null. Если ему передать массив ключей, то он вернет коллекцию, состоящую из записей по этим ключам. А если нужен поиск по полям, который вернёт коллекцию, для этого подходит метод where:

Кроме where, нам понадобятся два похожих метода:

  • Model::all() извлекает все записи из таблицы. Такой метод подходит только в некоторых ситуациях, в основном при работе со справочниками где немного данных. В остальных случаях он может выбрать в память слишком много записей, что породит ненужную нагрузку на сервер.
  • Model::paginate($page) – извлекает записи постранично. Основной метод, который используется в списках.

И последнее, что можно сделать с сущностью, это удалить её:

Состав модели

В реальных проектах от десятков до тысяч (или десятков тысяч!) сущностей. При таких количествах, помнить из чего состоят модели – невозможно. Более того, в проект могут и будут приходить новые люди, которые не знают структуры моделей.

Узнать какие поля есть у модели можно несколькими способами. Ими придётся пользоваться регулярно:

База данных. Всегда можно подключиться напрямую и посмотреть структуру таблицы. В разных базах данных это делается по разному.

Laravel имеет встроенный механизм извлечения структуры таблицы. Он сам им пользуется для работы модели.

Пожалуй самый простой и распространённый способ — зайти в REPL, извлечь первую сущность нужной модели и распечатать её.

Открыть доступ

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

Читайте также: