带有模型的Laravel PHP特性
我有一个PHP特性,我将在任何可以执行特定操作集的模型中使用它。例如,其中一个操作是completion,completed_at用时间戳标记 特质法是:带有模型的Laravel PHP特性,php,laravel,laravel-5,Php,Laravel,Laravel 5,我有一个PHP特性,我将在任何可以执行特定操作集的模型中使用它。例如,其中一个操作是completion,completed_at用时间戳标记 特质法是: /** * @return $this * @throws Exception */ public function markCompleted(){ if($this->canDoAction('complete')){ $this->completed_at = Carbon::now();
/**
* @return $this
* @throws Exception
*/
public function markCompleted(){
if($this->canDoAction('complete')){
$this->completed_at = Carbon::now();
return $this;
}
}
在我的控制器中,我在一个模型上调用它,该模型可以执行如下操作
$app->markCompleted()->save();
$app在我查看其内容时不为空
运行此命令将返回如下错误
local.ERROR: Call to a member function save() on null
$this不是表示使用此特性的模型吗?如果条件不满足,则将返回
null
,因此,不要单独调用save
,而是在该方法内执行此操作,例如:
public function markCompleted()
{
if ($this->canDoAction('complete')) {
$this->completed_at = Carbon::now();
return $this->save(); // true/false
}
}
然后像这样使用它:
$app->markCompleted();
您编码的方式是,即使条件不匹配,也会调用
保存
方法,这是一个副作用。Alpha所说的另一个变体
/**
* @return $this
* @throws Exception
*/
public function markCompleted(){
if($this->canDoAction('complete')){
$this->completed_at = Carbon::now();
}
return $this;
}
这样,您总是返回一个模型,如果需要,您可以在执行保存之前链接其他函数。如果条件不满足,则将返回
null
。