【发布时间】:2015-06-18 17:42:43
【问题描述】:
我正在使用 Laravel 5.1,当模型之前的模型使用 appends 数组时,我想从 Trait 访问模型上的数组。
如果我的特征存在,我想将某些项目添加到 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;
}
}
型号
<?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');
}
}
我有seen some workarounds for this,但它们似乎都比手动将项目添加到数组中更好/更干净。任何想法都表示赞赏。
更新
我发现了这种方式来完成我需要的一个 trait,但它只适用于一个 trait,我看不出使用这种方式优于继承。
特质
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);
}
【问题讨论】:
-
@ceejayoz 我在我的问题中引用了这个问题和答案。我正在寻找另一种方法。如果您在答案中看到其他方式,请指出。
-
@ceejayoz 我投票决定重新打开它。 OP 在类中重载构造函数时没有问题。 OP 正在寻求一种不必这样做的方法,并且有一种特定于 Laravel 的方法来实现用户想要的。
标签: php laravel laravel-5 traits