Model 自定义模型方法

Model 自定义模型方法,model,laravel-5.1,Model,Laravel 5.1,让我们假设我有一个叫做汽车和图像的模型。一辆车有多个图像,因此我可以使用以下 public function images() { return $this->hasMany('App\Image')->orderBy('order', 'asc'); } 当我想展示画廊的时候,这很好。但是假设我想要他们的第一张照片,我可以用这个 public function firstimg() { return $this->hasOne('App\Image')-&g

让我们假设我有一个叫做汽车和图像的模型。一辆车有多个图像,因此我可以使用以下

public function images()
{
    return $this->hasMany('App\Image')->orderBy('order', 'asc');
}
当我想展示画廊的时候,这很好。但是假设我想要他们的第一张照片,我可以用这个

public function firstimg()
{
    return $this->hasOne('App\Image')->orderBy('order', 'asc')->take(1);
}
这也很有效

现在的问题是:如果汽车没有图像,它将返回NULL。相反,我希望它返回一些默认的图像对象,因为我希望避免在视图中检查它。这在很多地方都有使用,这就是为什么我想在模型中实现它,而不是在控制器或视图中。
如何在不进行太多sql查询的情况下执行此操作?

您可以在模型中创建一个函数,以在存在时返回汽车图像,或返回具有默认图像路径的默认图像对象,如下面的示例函数所示

function getCarImages(){
    if( $this->has('images', '>=', 1) ) {
        return $this->images;
    }else{
        $img = new App\Image;
        $img->url = 'path/to/default/image.jpg';
        return $img;
    }
}
我认为你的函数firstimg应该是这样的

function firstimg(){
    if( $this->has('images', '>=', 1) ) {
        return $this->images->first();
    }else{
        $img = new App\Image;
        $img->url = 'path/to/default/image.jpg';
        return $img;
    }
}

希望这对您有所帮助。

不幸的是,这不起作用:“关系方法必须返回一个类型为illumb\Database\elounce\Relations\Relations的对象”。这是主要问题,我需要返回关系而不是对象您可以在数据库images表中创建id为的图像记录,例如1,当创建汽车时,如果没有为此汽车上载的图像,请将默认图像对象记录与此汽车相关联,因此您现在将其作为关系执行,即使它无法直接工作,也可以作为解决方案接受,它帮助我思考这个问题,并提出更好的解决方案