Поиск…
Создание модели
Создание модели
Модельные классы должны расширять Illuminate\Database\Eloquent\Model
. По умолчанию для моделей используется каталог /app
.
Класс модели может быть легко сгенерирован командой Artisan :
php artisan make:model [ModelName]
Это создаст новый файл PHP в app/
по умолчанию, который называется [ModelName].php
и будет содержать все шаблоны для вашей новой модели, включая класс, пространство имен и использование, необходимые для базовой настройки.
Если вы хотите создать файл миграции вместе с вашей моделью, используйте следующую команду, где -m
также будет генерировать файл миграции:
php artisan make:model [ModelName] -m
В дополнение к созданию модели это создает миграцию базы данных, которая подключается к модели. Файл PHP миграции базы данных по умолчанию находится в database/migrations/
. Это не по умолчанию - включает в себя все, кроме столбцов id и created_at
/ updated_at
, поэтому вам нужно будет отредактировать файл, чтобы предоставить дополнительные столбцы.
Обратите внимание, что вам потребуется выполнить миграцию (после того, как вы настроили файл миграции), чтобы модель начала работать, используя php artisan migrate
из корня проекта
Кроме того, если вы хотите добавить переход позже, после создания модели вы можете сделать это, запустив:
php artisan make:migration [migration name]
Скажем, например, вы хотели создать модель для своих кошек, у вас было бы два варианта, чтобы создать с миграцией или без нее. Вы бы решили создать без миграции, если у вас уже была таблица кошек или вы не хотели ее создавать в это время.
В этом примере мы хотим создать миграцию, потому что у нас еще нет таблицы, поэтому будет выполняться следующая команда.
php artisan make:model Cat -m
Эта команда создаст два файла:
- В папке «Приложение»:
app/Cat.php
- В папке
database/migrations/timestamp_creat_cats_table.php
данных:database/migrations/timestamp_creat_cats_table.php
Файл, который нам интересен, является последним, так как именно этот файл мы можем решить, к чему мы хотим, чтобы таблица выглядела и включалась. Для любой предопределенной миграции нам присваивается столбец с индексом auto incrementing id и столбцы timestamps.
Нижеприведенный пример извлечения файла миграции включает в себя вышеуказанные предопределенные столбцы, а также добавление имени кота, возраста и цвета:
public function up()
{
Schema::create('cats', function (Blueprint $table) {
$table->increments('id'); //Predefined ID
$table->string('name'); //Name
$table->integer('age'); //Age
$table->string('colour'); //Colour
$table->timestamps(); //Predefined Timestamps
});
}
Таким образом, вы можете легко создать модель и выполнить миграцию для таблицы. Затем, чтобы выполнить миграцию и создать ее в своей базе данных, вы выполните следующую команду:
php artisan migrate
Которая перенесет любые выдающиеся миграции в вашу базу данных.
Расположение файла модели
Модели можно хранить в любом месте благодаря PSR4 .
По умолчанию модели создаются в каталоге app
с пространством имен App
. Для более сложных приложений обычно рекомендуется хранить модели в своих собственных папках в структуре, которая имеет смысл для архитектуры ваших приложений.
Например, если у вас было приложение, в котором использовалась серия фруктов в качестве моделей, вы могли бы создать папку под названием app/Fruits
и в этой папке вы создадите Banana.php
(поддерживая соглашение об именах StudlyCase ), тогда вы можете создать класс Banana в пространстве имен App\Fruits
:
namespace App\Fruits;
use Illuminate\Database\Eloquent\Model;
class Banana extends Model {
// Implementation of "Banana" omitted
}
Конфигурация модели
«Красноречивый» следует за «соглашением по конфигурации». Расширяя базовый класс Model
, все модели наследуют перечисленные ниже свойства. Если не переопределены, применяются следующие значения по умолчанию:
Имущество | Описание | По умолчанию |
---|---|---|
protected $connection | Имя соединения БД | Соединение по умолчанию DB |
protected $table | Название таблицы | По умолчанию имя класса преобразуется в snake_case и pluralized. Например, SpecialPerson становится special_people |
protected $primaryKey | Таблица PK | id |
public $incrementing | Указывает, будут ли идентификаторы автоматически увеличиваться | true |
public $timestamps | Указывает, должна ли модель быть временной отметкой | true |
const CREATED_AT | Имя столбца временной метки создания | created_at |
const UPDATED_AT | Имя столбца временной отметки модификации | updated_at |
protected $dates | Атрибуты, которые должны быть изменены на DateTime, в дополнение к атрибутам timestamps | [] |
protected $dateFormat | Формат, в котором атрибуты даты сохраняются | По умолчанию для текущего диалекта SQL. |
protected $with | Отношения к eagerload с моделью | [] |
protected $hidden | Атрибуты опущены в сериализации модели | [] |
protected $visible | Атрибуты, разрешенные в сериализации модели | [] |
protected $appends | Атрибуты атрибутов добавлены в сериализацию модели | [] |
protected $fillable | Атрибуты, которые могут быть распределены по массе | [] |
protected $guarded | Атрибуты, которые перечислены в черном списке из массового присвоения | [*] (Все атрибуты) |
protected $touches | Отношения, которые следует затронуть | [] |
protected $perPage | Количество моделей, возвращаемых для разбивки на страницы. | 15 |
Имущество | Описание | По умолчанию |
---|---|---|
protected $casts | Атрибуты, которые должны быть отнесены к родным типам | [] |
Обновление существующей модели
$user = User::find(1);
$user->name = 'abc';
$user->save();
Вы также можете обновлять сразу несколько атрибутов, используя update
, которое не требует использования save
впоследствии:
$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz']);
Вы также можете обновить модель (ы) без предварительного запроса:
User::where('id', '>', 2)->update(['location' => 'xyz']);
Если вы не хотите запускать изменение в timestamp updated_at
на модели, вы можете передать touch
параметр:
$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz'], ['touch' => false]);