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:
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:
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:
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.