Laravel Eloquent Accessors - laukų pakeitimai

2014-09-30

Labai reta situacija, bet man prireikė: sakykime, kad ištraukus duomenis iš duomenų bazės, su konkrečiu lauku reikia atlikti nedidelius pakeitimus - padidinti pirmąją raidę, užšifruoti ar pakeisti iš string į integer. Būtent su pastaruoju atveju ir susidūriau.

Laravel Eloquent funkcija lists(), turinti grąžinti masyvą, atlieka viską pagal paskirtį - bet kai reikėjo rezultatą pateikti JSON formatu, kažkodėl rezultatai buvo rodomi tarp kabučių kaip string kintamieji, nors DB lauko tipas yra INT.

Tokiu atveju gali praversti specialios funkcijos, įrašomos į Modelį. Sakykime, turime lauką day_of_week, tada Modelio fragmentas gali atrodyt taip:

public function getDayOfWeekAttribute($value)
{
  return (int)$value;
}

Taisyklė tokia - funkcijos pavadinimas turi būti getLaukasAttribute() kur Laukas yra apdorojamo DB lauko pavadinimas. Svarbus momentas - jei pastebėjote, lauko pavadinimas yra su pabraukimais _ - o funkcijos pavadinimas turi būti CamelCase formato.

Taip pat, parašius šią funkciją, reikia nurodyti apdorojamą lauką Modelio kintamuosiuose:

protected $appends = array('day_of_week');

Tik būkite atsargūs - jei įrašysite tokią funkciją, ji bus kviečiama KIEKVIENĄ kartą, kai gaunamas šis DB laukas - o juk gali būti, kad šio pakeitimo jums reikia ne visur.

Tiesa, analogiškai galima pakeisti lauko reikšmę ir prieš įterpimą į DB - šiuo atveju funkcijos pavadinime vietoje get atsiranda set, o priskyrimas vyksta kiek kitaip.

public function setDayOfWeekAttribute($value)
{
  $this->attributes['day_of_week'] = (int)$value;
}

Daugiau apie Accessors ir Mutators skaitykite dokumentacijoje.


(Mailchimp sistema jums atsiųs patvirtinimo laišką, nepamirškite patvirtinti)


Komentarų: 0




Naujausi PHPpamokos.lt online-kursai

23 EUR (79.41 Lt)
23 EUR (79.41 Lt)
23 EUR (79.41 Lt)
Nuo Laravel 4 prie Laravel 5
Povilas Korop

23 EUR (79.41 Lt)
MySQL: nuo pradmenų iki optimizavimo
Povilas Korop
23 EUR (79.41 Lt)
OOP: objektinis programavimas su PHP
Povilas Korop
23 EUR (79.41 Lt)
Kaip kurti Wordpress pluginus?
Arūnas Liuiza

23 EUR (79.41 Lt)
PHP online-kursas pradedantiesiems
Povilas Korop