サーチ…


モデルを作る

モデル作成

モデルクラスは、 Illuminate\Database\Eloquent\Model拡張する必要があります。モデルのデフォルトの場所は/appディレクトリです。

Artisanコマンドを使用すると、モデルクラスを簡単に生成できます。

php artisan make:model [ModelName]

これはデフォルトでapp/新しいPHPファイルを作成します。これは[ModelName].phpという名前で、新しいモデルの定型文をすべて含みます。クラス、名前空間、および基本設定に必要なusingを含みます。

モデルと共に移行ファイルを作成する場合は、次のコマンドを使用します。- -mは移行ファイルも生成します。

php artisan make:model [ModelName] -m

モデルの作成に加えて、モデルに接続されたデータベース移行が作成されます。データベース移行PHPファイルは、デフォルトでdatabase/migrations/ます。デフォルトでは、idおよびcreated_at / updated_atカラム以外のものは含まれないため、追加のカラムを提供するためにファイルを編集する必要があります。

プロジェクトルートからphp artisan migrateを使用して、モデルを動作させるためには、マイグレーションを実行する必要があります(マイグレーションファイルを設定したら)。

また、後でモデルを作成した後にマイグレーションを追加する場合は、次のコマンドを実行してマイグレーションを追加することができます。

php artisan make:migration [migration name]

たとえば、Catsのモデルを作成したいとします。これは2つの選択肢があり、移行の有無にかかわらず作成することができます。既にcatsテーブルを持っていた場合や、現時点でcatsテーブルを作成したくない場合は、移行せずに作成することを選択しました。

この例では、まだテーブルを持っていないので、次のコマンドを実行するので、移行を作成します。

php artisan make:model Cat -m

このコマンドは2つのファイルを作成します:

  1. Appフォルダ内: app/Cat.php
  2. データベースフォルダ: database/migrations/timestamp_creat_cats_table.php

私たちが関心を持っているファイルは、このファイルのように後者です。私たちは、テーブルをどのように見せたいかを決めることができます。定義済みのマイグレーションの場合は、自動増分ID列とタイムスタンプ列が与えられます。

以下の移行ファイルの抽出例には、上記の定義済みの列だけでなく、猫の名前、年齢、色の追加が含まれます。

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.phpStudlyCase命名規則を維持)を作成すると、Bananaクラスを作成できますApp\Fruitsネームスペースで:

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

class Banana extends Model {
    // Implementation of "Banana" omitted
}

モデル構成

Eloquentは、「構成上の規則」アプローチに従います。基本Modelクラスを拡張すると、すべてのモデルが以下に示すプロパティを継承します。上書きされない限り、次のデフォルト値が適用されます。

プロパティ説明デフォルト
protected $connection DB接続名デフォルトのDB接続
protected $table テーブル名デフォルトでは、クラス名はsnake_case変換され、複数化されます。例えば、 SpecialPersonなりspecial_people
protected $primaryKey テーブルPK id
public $incrementing IDが自動インクリメントされているかどうかを示します。 true
public $timestamps モデルにタイムスタンプを付ける必要があるかどうかを示します。 true
const CREATED_AT 作成タイムスタンプ列の名前 created_at
const UPDATED_AT 変更タイムスタンプ列の名前 updated_at
protected $dates timestamps属性に加えて、DateTimeに変更する必要がある属性 []
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();

また、後でsaveを使用save必要のないupdateを使用して、複数の属性を一度に更新することもできます。

$user = User::find(1);
$user->update(['name' => 'abc', 'location' => 'xyz']);

あらかじめクエリを実行することなくモデルを更新することもできます:

User::where('id', '>', 2)->update(['location' => 'xyz']);

モデルの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