Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有模型的Laravel PHP特性_Php_Laravel_Laravel 5 - Fatal编程技术网

带有模型的Laravel PHP特性

带有模型的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();

我有一个PHP特性,我将在任何可以执行特定操作集的模型中使用它。例如,其中一个操作是completion,completed_at用时间戳标记

特质法是:

/**
 * @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