2017-02-10 5 views
1

私のモデルでデータを操作したいのですがどうすればいいですか?私はこれをしようとしているが、それは動作しません:モデルデータを変異させる

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

何を期待するか、何が返されますか? – EddyTheDove

+0

'$ account-> online'変数は' Online'を返すと期待していますが、それでも '1'を返します –

+0

' $ account-> onlineStatus = $ account-> online? 'Online': 'Offline'; 'これが機能するかどうかを確認します。 – EddyTheDove

答えて

3

Define an accessorAccountモデルに:

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

ビューでこれを使用することはできますか?または、これをコントローラの変数としてこれをcomposeと一緒に追加する必要がありますか? –

+0

アプリのどこからでもこのプロパティにアクセスしようとすると、 '1'から' Online'に変換されます。 –

+1

ああ私はそれを手に入れます。私の間違いは、Accountモデルに参加していたCharacterモデルにメソッドを追加することでした。私がAccountにメソッドを追加すると、そのメソッドは機能しました。ありがとうございました! –

1

これは試してみてください:

a)は、アカウントのモデルの関係を定義し

b)アクセサーを作成します(getAccountStrAttributeという名前です。つまり、$acc->account_strのように呼びます)。

C)ウィン

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; 
    } 
} 
関連する問題