Lekcja będąca wstępem do zabawy modelami w Laravelu. Trochę teorii, później będzie już tylko ciekawiej. Do dzieła.
Pamiętamy fillable? Było nam potrzebne żeby móc robić tzw. mass assignment:
class Person extends Model
{
protected $fillable = ['firstName', 'lastName', 'age'];
use HasFactory;
}
Czasami zamiast tego korzystamy z $guarded (i tam mamy listę tych kolumn, których nie pozwalamy użytkownikowi wpisywać), koniec końców ja wolę fillable.
Ok, a co jeśli nasza tabela i model mają nazwy niezgodne z konwencjami nazewniczymi Laravela i nie potrafi się domyślić jaka jest nazwa tabeli po nazwie modelu?
class Flight extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'my_flights';
}
Mamy też rozwiązanie na dziwnie nazwane primary_key:
class Flight extends Model
{
/**
* The primary key associated with the table.
*
* @var string
*/
protected $primaryKey = 'flight_id';
}
A nawet na niestandardowy typ klucza głównego:
<?php
class Flight extends Model
{
/**
* The data type of the primary key ID.
*
* @var string
*/
protected $keyType = 'string';
}
Laravel zawsze zakłada, że created_at i updated_at są obecne ($table->timestamps() w migracji). Jeżeli ich nie ma, musimy to dookreślić:
class Flight extends Model
{
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
}
A może są, ale inaczej nazwane? Też nie ma problemu:
<?php
class Flight extends Model
{
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'updated_date';
}
Niektóre modele mogą używać innego połączenia niż reszta (która używa domyślnego połączenia, mamy je w .env) i to też trzeba określić:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The database connection that should be used by the model.
*
* @var string
*/
protected $connection = 'mysql';
}
Ok, więcej o modelach w następnych lekcjach.