Ricerca…


Fare un modello

Creazione del modello

Le classi di modelli devono estendere Illuminate\Database\Eloquent\Model . La posizione predefinita per i modelli è la directory /app .

Una classe modello può essere facilmente generata dal comando Artisan :

php artisan make:model [ModelName]

Questo creerà un nuovo file PHP in app/ per impostazione predefinita, denominato [ModelName].php , e conterrà tutto lo standard per il nuovo modello, che include la classe, lo spazio dei nomi e l'uso richiesto per una configurazione di base.

Se si desidera creare un file di migrazione insieme al proprio modello, utilizzare il seguente comando, dove -m genererà anche il file di migrazione:

php artisan make:model [ModelName] -m

Oltre a creare il modello, crea una migrazione del database collegata al modello. Il file PHP di migrazione del database si trova per impostazione predefinita nel database/migrations/ . Questo, per impostazione predefinita, non include altro che le colonne id e created_at / updated_at , quindi dovrai modificare il file per fornire colonne aggiuntive.

Nota che dovrai eseguire la migrazione (una volta impostato il file di migrazione) affinché il modello inizi a funzionare usando php artisan migrate dalla radice del progetto

Inoltre, se desideri aggiungere una migrazione in un secondo momento, dopo aver creato il modello, puoi farlo eseguendo:

php artisan make:migration [migration name]

Supponiamo ad esempio di voler creare un modello per i tuoi gatti, avresti due possibilità, da creare con o senza migrazione. Avresti scelto di creare senza migrazione se avevi già una tabella di gatti o non volevi crearne una in questo momento.

Per questo esempio, vogliamo creare una migrazione perché non abbiamo già una tabella, quindi eseguiremo il seguente comando.

php artisan make:model Cat -m

Questo comando creerà due file:

  1. Nella cartella App: app/Cat.php
  2. Nella cartella del database: database/migrations/timestamp_creat_cats_table.php

Il file a cui siamo interessati è il secondo in quanto è questo file che possiamo decidere su cosa vogliamo che la tabella assomigli e includa. Per ogni migrazione predefinita viene fornita una colonna di identificazione automatica incrementale e una colonna di data / ora.

L'esempio seguente di un estratto del file di migrazione include le colonne predefinite di cui sopra e l'aggiunta di un nome di gatto, età e colore:

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

        });
    }

Quindi, come puoi vedere, è relativamente facile creare il modello e la migrazione per un tavolo. Quindi per eseguire la migrazione e crearla nel tuo database devi eseguire il seguente comando:

php artisan migrate

Che migrerà tutte le migrazioni in sospeso nel tuo database.


Posizione del file del modello

I modelli possono essere archiviati ovunque grazie a PSR4 .

Di default i modelli vengono creati nella directory app con lo spazio dei nomi di App . Per applicazioni più complesse, in genere è consigliabile archiviare i modelli all'interno delle proprie cartelle in una struttura che abbia senso per l'architettura delle app.

Ad esempio, se hai un'applicazione che utilizza una serie di frutti come modelli, puoi creare una cartella chiamata app/Fruits e all'interno di questa cartella creerai Banana.php (mantenendo la convenzione di denominazione StudlyCase ), potresti quindi creare la classe Banana nello spazio dei nomi App\Fruits :

namespace App\Fruits;

use Illuminate\Database\Eloquent\Model;

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

Configurazione del modello

Eloquent segue un approccio "convenzione sulla configurazione". Estendendo la classe Model base, tutti i modelli ereditano le proprietà elencate di seguito. Salvo sovrascrittura, si applicano i seguenti valori predefiniti:

Proprietà Descrizione Predefinito
protected $connection Nome della connessione DB Connessione DB predefinita
protected $table Nome della tabella Per impostazione predefinita, il nome della classe viene convertito in snake_case e pluralizzato. Ad esempio, SpecialPerson diventa special_people
protected $primaryKey Tabella PK id
public $incrementing Indica se gli ID sono a incremento automatico true
public $timestamps Indica se il modello deve essere timestamp true
const CREATED_AT Nome della colonna timestamp di creazione created_at
const UPDATED_AT Nome della colonna timestamp di modifica updated_at
protected $dates Attributi che devono essere modificati in DateTime, oltre agli attributi di timestamp []
protected $dateFormat Formato in cui gli attributi della data saranno mantenuti Predefinito per il dialetto SQL corrente.
protected $with Rapporti da caricare con il modello []
protected $hidden Attributi omessi nella serializzazione del modello []
protected $visible Attributi consentiti nella serializzazione del modello []
protected $appends Accessors di attributi aggiunti alla serializzazione del modello []
protected $fillable Attributi che sono assegnabili in serie []
protected $guarded Attributi elencati in nero dall'assegnazione di massa [*] (Tutti gli attributi)
protected $touches Le relazioni che dovrebbero essere toccate al salvataggio []
protected $perPage Il numero di modelli da restituire per l'impaginazione. 15
5.0
Proprietà Descrizione Predefinito
protected $casts Attributi che dovrebbero essere convertiti in tipi nativi []

Aggiorna un modello esistente

$user = User::find(1);
$user->name = 'abc';
$user->save();

È inoltre possibile aggiornare più attributi contemporaneamente utilizzando l' update , che non richiede l'utilizzo del save seguito:

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

È inoltre possibile aggiornare un modello (i) senza prima averlo richiesto:

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

Se non si desidera attivare una modifica al timestamp updated_at sul modello, è possibile passare l'opzione touch :

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow