Skip to content

Models

Documentazione di riferimento: Laravel Eloquent

I model nel Framework Laravel sono le classi che mappano le tabelle che si trovano su Database, quindi se su database ho una tabella di utenti users avrò il rispettivo model User.

Nel nostro Framework non dobbiamo preoccuparci della creazione manuale dei model, perchè questa operazione viene fatta in automatico da un package (Reliese Laravel) che viene installato nella procedura iniziale.

I nostri model come chiave primaria usano gli UUID di tipo string e non i classici int auto-incrementali.

I nostri model estendono a loro volta una classe base, quindi il nostro model User estende la classe Base/User che conterrà una serie di metodi e automatismi già gestiti (come per esempio l'auto-generazione degli uuid) ed inoltre contengono la documentazione delle colonne e delle relazioni. La classe base viene sovrascritta ogni volta che si esegue una migrazione oppure ad ogni utilizzo del comando weconstudio:model:update. Questo vuol dire che NON bisogna modificare il model base perchè le modifiche verranno perse.

Relazioni

Alle volte è necessario creare delle relazioni che in automatico non vengono generate, questo può essere fatto andando a creare un metodo con il nome della relazione all'interno del nostro model. Esempio:

php
public function attachments(): MorphMany
{
    return $this->morphMany(Attachment::class, 'attachable');
}

A volte invece vogliamo sovrascrivere una relazione che viene automaticamente generata nella classe base andando per esempio ad aggiungere un ordinamento di default. Questo potrà essere fatto copiando ed incollando la relazione dal model base e quindi modificandola come serve. Esempio:

php
public function employments(): HasMany
{
    return $this->hasMany(Employment::class)
        ->orderBy('employments.from');
}

Tabelle pivot

Capita che un model non abbia la colonna id, per esempio su tabelle N-N. Per disattivare certi automatismi che rendono alcuni metodi inutilizzabili (per esempio il metodo create) bisogna andare ad aggiungere la seguente linea di codice all'interno del model:

php
protected $primaryKey = null;

Fillable

Spesso nel nostro codice utilizziamo metodi come fill o create. Questi metodi si basano sulla proprietà $fillable del model che limita la valorizzazione alle sole colonne comprese in questo array. Capita molto spesso di aggiungere delle colonne alla tabella su database mediante una migrazione e quindi bisogna ricordarsi di aggiungere queste colonne all'array $fillable così che anche i valori di queste nuove colonne vengano salvati.