2014-11-07 1 views
0

Я пытаюсь иногда добавить мой Accessor в результате запроса красноречив.Append аксессор по требованию

Вот моя сбруя:

public function getCatAttribute() { 
    return "Here's a cat!"; 
} 

Если я добавляю его с помощью protected $appends = array('cat'); массива, он загружает его очень хорошо каждый раз.

Однако при удалении, поскольку я не хочу, чтобы он всегда добавлял его, я не могу загрузить его на запрос Eloquent.

Вот что я пробовал:

$items = Item::with('cat')->get(); 

Как я могу добиться этого?

+0

Аксессуры не прилагаются к какому-либо запросу. Они обрабатываются во время вызова 'toArray' /' toJson', если вы используете свойство '$ appends', вот и все. Итак, чего вы хотите достичь? –

+0

Я хочу, чтобы в некоторых случаях добавить атрибут * Cat *, а не другие –

+1

Ну, очевидно .. Вы неспециалисты, поэтому хотите, чтобы другие догадывались? Теперь я могу только сказать вам: создать логику, в которой SOMETIMES возвращает мутированное значение, иначе возвращает его в целости. –

ответ

1

Я не знаю, понимаю ли я проблему, но вы можете создать аксессуар для не существующего атрибута. Если у вас есть cat атрибут, вы можете создать:

public function getModCatAttribute($value) { 
    if ($this->cat == 'dog') { 
    return "I'm a dog"; 
    } 
    return $this->cat; 
} 

так что вы можете получить доступ прямо сейчас $model->cat и $model->mod_cat. Для общего использования этот метод лучше, потому что у вас всегда будет доступ к исходному свойству и для измененного, и вы всегда знаете, какой из них модифицирован.

Но вы также можете сделать это следующим образом:

public function getCatAttribute($value) { 
    if ($this->cat == 'dog') { 
    return "I'm a dog"; 
    } 
    return $this->cat; 
} 

И теперь вы можете получить доступ к $model->cat и результат полагаться на то, что у вас есть внутри атрибута $cat.