2017-02-10 3 views
1

Ich möchte Daten in meinem Modell bearbeiten, wie würde ich das tun? Ich versuche, diese aber es funktioniert nicht:Mutieren von Modelldaten

class Character extends Model 
{ 
    //Get players by level 
    public function scopeGetPlayersByLevel($query){ 
     $output = $query->orderBy('level', 'desc')->get(); 
     $output->classid = 100; 
     return $output; 
    } 

    //Get online status 
    public function account(){ 
     $account = $this->belongsTo(Account::class, 'account_name', 'username'); 
     $account->online = $account->online == 1 ? 'Online' : 'Offline'; 
     return $account; 
    } 
} 
+0

Was erwarten Sie und was zurückgegeben wird? – EddyTheDove

+0

Ich erwarte von der '$ account-> online' -Variable,' Online' zurückzugeben, aber es gibt immer noch '1' zurück –

+0

versuche' $ account-> onlineStatus = $ account-> online? 'Online': 'Offline'; 'Sehen Sie, ob das funktioniert. – EddyTheDove

Antwort

3

Define an accessor im Account Modell:

public function getOnlineAttribute($value) 
{ 
    return $value === 1 ? 'Online' : 'Offline'; 
} 
+0

Ist es möglich, dies in der Ansicht zu verwenden? Oder muss ich das als Variable im Controller mit komponieren hinzufügen? –

+0

Es wird nur "1" in "Online" konvertiert, wenn Sie versuchen, von einem beliebigen Teil Ihrer App aus auf diese Eigenschaft zuzugreifen. –

+1

Ahh ich verstehe es. Mein Fehler war, dass ich die Methode dem Character-Modell hinzufügte, das dem Account-Modell beitrat. Als ich die Methode zu Account hinzugefügt habe, hat es funktioniert. Vielen Dank! –

1

Versuchen Sie folgendes:

a) für Kontenmodell eine Beziehung definieren

b) Machen Sie einen Accessor (ich nannte es getAccountStrAttribute, was bedeutet, dass Sie es so nennen: $acc->account_str).

c) Win

class Character extends Model 
{ 
    // Relationship defined 
    public function account() { 
     return $query->belongsTo(Account::class, 'account_name', 'username'); 
    } 

    //Get online status 
    public function getAccountStrAttribute(){ 
     return $this->account->online ? 'Online' : 'Offline'; 
    } 

    // I can't figure out what you want this function to return/do :/ 
    //Get players by level 
    public function scopeGetPlayersByLevel($query){ 
     $output = $query->orderBy('level', 'desc')->get(); 
     $output->classid = 100; 
     return $output; 
    } 
}