Programim dhe zhvillim, javascript, python, php, html

Aksesorët Laravel, marrëdhëniet dhe ngarkimi i etur

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.

15.06.2015

Përgjigjet:


1

Kur jeni të etur të ngarkoni, nuk dëshironi të telefononi $gun->brand për të marrë emrin e markës. Kjo tashmë është konfiguruar për të kthyer modelin Brand. Për të marrë emrin e një marke arme, do të bëni diçka të tillë:

$gun->brand->name;

Kjo është duke supozuar se keni një kolonë name në tabelën tuaj brands.

Ju gjithashtu mund ta vendosni atë në aksesor duke hyrë në lidhjen që tashmë është konfiguruar.

public function getBrandAttribute()
{
    return $this->brand->name;
}

Kini kujdes edhe pse Laravel e ka konfiguruar tashmë këtë aksesor dhe me këtë metodë, ju do ta mbishkruani atë. Unë do të sugjeroja të përdorni një atribut tjetër nëse mundeni, ex... getBrandNameAttribute()

15.06.2015
  • Kjo nuk funksionon brenda modelit kur vendosni aksesorin getBrandAttribute. 15.06.2015
  • Ju nuk keni nevojë për aksesorin 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.2015
  • Po, por duhet të përdor aksesorë për qëllime të tjera. Më duhet të tregoj automatikisht emrin e markës, jo ID-në. 15.06.2015
  • Zakonisht përgjigjja për këtë është të krijoni një listë rënëse për atë fushë me të gjitha markat dhe vlerat e opsioneve do të ishin id. Në këtë mënyrë, kur përdorni Form::model(), ai vendos vlerën e saktë duke përdorur ID-në, por ende tregon emrin. 15.06.2015
  • Unë e kam përditësuar përgjigjen, ajo duhet t'ju japë atë që dëshironi pa pasur nevojë të kërkoni bazën e të dhënave për sa kohë që ju e keni ngarkuar tashmë atë lidhje. 15.06.2015
  • Faleminderit user3158900, por po gjeneroj skedarë docx nga laravel. Më duhen të dhënat për të shkuar te skedari me vlerën nga tabela e markave, jo id. Unë jam duke përdorur një bibliotekë dhe nuk mund të dërgoj të dhëna si kjo: $gun-›brand-›name. Më duhet të dërgoj siç është, nga baza e të dhënave. Kjo është arsyeja pse aksesori është opsioni i vetëm tani. 15.06.2015
  • Edhe aksesori që sapo shtova në përgjigjen time nuk do të funksionojë? 15.06.2015
  • Provova zgjidhjen tuaj, megjithatë, marr gabimin e mëposhtëm: Veti e papërcaktuar: Gun::$brand 15.06.2015

  • 2

    Ju nuk mund të merrni aksesorë direkt me ngarkim të etur. Duhet ta bashkëngjitni objektin kur e përdorni.

    $guns = Gun::with('brand')->findOrFail($id);
    
    foreach($guns as $gun){
       $gun->brand->setAppends(['brand']);
    
       //logic
       $brand = $gun->brand->brand;
    }
    
    22.06.2018
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..