Poznajemy akcesory w modelach Laravela – po staremu i po nowemu. Do dzieła!
Ok, po staremu, dla referencji:
class Person extends Model
{
protected $fillable = ['firstName', 'lastName', 'age'];
protected $appends = ['full_name'];
use HasFactory;
public function fullname(){
return $this->firstName . " " . $this->lastName;
}
public function makeOlder($by=1){
$this->age += $by;
$this->save();
}
public function getFullNameAttribute()
{
return $this->first_name . " " . $this->last_name;
}
}
Ok, atrybut „nieistniejący” (nie mający odpowiednika w kolumnie w bazie danych):
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
class Person extends Model
{
protected $fillable = ['firstName', 'lastName', 'age'];
use HasFactory;
// public function fullname(){
// return $this->firstName . " " . $this->lastName;
// }
public function makeOlder($by=1){
$this->age += $by;
$this->save();
}
protected function fullName(): Attribute
{
return Attribute::make(
get: fn () => $this->firstName . " " . $this->lastName,
);
}
}
Teraz użycie:
Artisan::command('fullname-attr {id}', function (int $id) {
$person = Person::findOrFail($id);
$this->comment("Name: {$person->full_name}");
$this->comment("Age: {$person->age}");
});
Konwencje nazewnicze są jakie są, trzeba się przyzwyczaić.