如何在Laravel 5中为模型中的现有字段定义访问器?

Yah*_*din 1 php laravel laravel-5 laravel-5.2

我有一个名为Book的表的模型,该表books有一个名为的字段cover_image

但是,我想为该字段定义一个访问器,cover_image而不仅仅是获取默认值。

这就是我尝试执行的操作:

class Book extends Model {

    public function getCoverImageAttribute() {

         if ($this->cover_image === null) { // Not sure how to check current value?
               return "a.jpg"
         }
         return $this->cover_image; 
    } 

}
Run Code Online (Sandbox Code Playgroud)

但是上述方法当然不起作用,因为$this->cover_image再次调用会导致递归

我怎样才能解决这个问题?

use*_*178 5

您必须改为检查属性:

class Book extends Model {

    public function getCoverImageAttribute() {
         return $this->attributes['cover_image'] ?? "a.jpg"; 
    } 

}
Run Code Online (Sandbox Code Playgroud)

这也可以让您正常使用$book->cover_image

我相信以下示例也可以使用:

class Book extends Model {

    public function getCoverImageAttribute($value) {    

         return is_null($value) ? 'a.jpg' : $value; 
    } 

}
Run Code Online (Sandbox Code Playgroud)