Я использую Laravel 5.1 и хотел бы получить доступ к массиву модели из Trait, когда модель до модели использует массив appends
.
Я хотел бы добавить некоторые элементы в массив appends, если он существует из моего свойства. Я не хочу редактировать модель, чтобы достичь этого. Являются ли свойства полезными в этом сценарии или я должен использовать наследование?
array_push($this->appends, 'saucedByCurrentUser');
Вот как работает моя текущая установка.
Тре
<?php namespace App;
trait AwesomeSauceTrait {
/**
* Collection of the sauce on this record
*/
public function awesomeSauced()
{
return $this->morphMany('App\AwesomeSauce', 'sauceable')->latest();
}
public function getSaucedByCurrentUserAttribute()
{
if(\Auth::guest()){
return false;
}
$i = $this->awesomeSauced()->whereUserId(\Auth::user()->id)->count();
if ($i > 0){
return true;
}
return false;
}
}
Model
<?php namespace App;
use App\AwesomeSauceTrait;
use Illuminate\Database\Eloquent\Model;
class FairlyBlandModel extends Model {
use AwesomeSauceTrait;
protected $appends = array('age','saucedByCurrentUser');
}
То, что я хотел бы сделать, - это нечто такое же, как и расширение класса. У меня есть несколько похожих черт, поэтому использование наследования становится несколько уродливым.
trait AwesomeSauceTrait {
function __construct() {
parent::__construct();
array_push($this->appends, 'saucedByCurrentUser');
}
}
Я видел некоторые обходные пути для этого, но ни один из них не выглядит лучше/чище, чем просто добавлять элемент в массив вручную. Любые идеи приветствуются.
Обновление
Я обнаружил этот способ выполнения того, что мне нужно для одного признака, но он работает только для одного признака, и я не вижу преимущества использования этого над наследованием.
черта
protected $awesomeSauceAppends = ['sauced_by_current_user'];
protected function getArrayableAppends()
{
array_merge($this->appends, $this->awesomeSauceAppends);
parent::getArrayableAppends();
}
Как я сейчас обрабатываю свою модель, для чего она стоит.
модель
public function __construct()
{
array_merge($this->appends, $this->awesomeSauceAppends);
}