Поиск…


Создание модели

Создание модели

Модельные классы должны расширять 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

Эта команда создаст два файла:

  1. В папке «Приложение»: app/Cat.php
  2. В папке 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
5.0
Имущество Описание По умолчанию
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]);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow