Laravel PHP Черты с моделями - PullRequest
0 голосов
/ 01 июня 2018

У меня есть черта PHP, которую я буду использовать в любой модели, которая может выполнять определенный набор действий.Например, одно из этих действий - завершение, где complete_at помечен меткой времени.

Метод trait:

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

У меня не былоt $ это модель, которая использует эту черту?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Еще один вариант того, что сказал Альфа.

/**
 * @return $this
 * @throws Exception
 */
public function markCompleted(){
    if($this->canDoAction('complete')){
        $this->completed_at = Carbon::now();
    }
    return $this;
}

Таким образом, вы всегда возвращаете модель и можете связать другие функции перед выполнением сохранения, если вам нужно.

0 голосов
/ 01 июня 2018

Если условие не удовлетворяется, то будет возвращено null, поэтому вместо вызова save отдельно, сделайте это внутри этого метода, например:

public function markCompleted()
{
    if ($this->canDoAction('complete')) {
        $this->completed_at = Carbon::now();
        return $this->save(); // true/false
    }
}

Затем используйте его как:

$app->markCompleted();

В способе, который вы закодировали, будет вызываться метод save, даже если условие не совпадает и это побочный эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...