Unë kam një aplikacion Laravel me disa forma dhe operacione CRUD. Në aplikacion kam një lidhje si kjo:
Kolona e markës (në tabelën Guns) i referohet ID-së në tabelën e markave.
Modeli i armës:
public function brand()
{
return $this->belongsTo('Brand', 'brand', 'id');
}
Modeli i markës:
public function gun()
{
return $this->hasMany('Gun', 'id', 'brand');
}
Kjo funksionon nëse përpiqem të ngarkoj të dhënat e armëve nga kontrolluesi, duke përdorur me, si kjo:
$results = Gun::with('brand')->findOrFail($id);
Sidoqoftë, sa herë që dua të përdor një model Formular për të shfaqur të dhënat e armës, marka shfaqet si ID, jo emri i markës.
Provova të vendosja një Accessor për këtë, si ky (modeli i armës):
public function getBrandAttribute ($id)
{
$attribute = Brand::find($id);
return ($attribute ? $attribute->value : $id);
}
Funksionon, por kur kthej një listë me të gjitha armët në bazën e të dhënave, kërkon shumë kohë.
Si mund të vendos një aksesor nga modeli që do të kthejë emrin e markës pa pasur nevojë të bëj një pyetje çdo herë?
Unë var_dump $this në aksesor dhe shoh të dhënat e armës, por nuk mund t'i shoh të dhënat nga tabela e markës.
getBrandAttribute
, ju përdorni$gun->brand->name;
për të marrë emrin e markës së një arme. Nuk ka nevojë për ndryshime në modele. 15.06.2015Form::model()
, ai vendos vlerën e saktë duke përdorur ID-në, por ende tregon emrin. 15.06.2015