2017-02-10 11 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

try' $ account-> onlineStatus = $ account-> онлайн? 'Online': 'Offline'; 'Посмотрите, работает ли это. – EddyTheDove

ответ

3

Define an accessor в Account модели:

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

Можно ли использовать это в представлении? Или мне нужно добавить это как переменную в контроллер с компоновкой? –

+0

Он просто преобразует '1' в' Online', когда вы попытаетесь получить доступ к этому свойству из любой части вашего приложения. –

+1

Ahh Я понимаю. Моя ошибка заключалась в том, что я добавлял метод к модели Character, которая присоединялась к модели Account. Когда я добавил метод в Account, он действительно сработал. Спасибо! –

1

Попробуйте это:

а) Определить зависимость для счета модели

b) Сделайте аксессуар (я назвал его getAccountStrAttribute, что означает, что вы называете это следующим образом: $acc->account_str).

с) 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; 
    } 
}