为所有雄辩模型添加方法的最佳方法

时间:2016-09-03 00:04:43

标签: laravel eloquent

我的某个模特上有last()方法。

class Article extends Model
{
    public function last()
    {
        return Article::orderBy('created_at', 'desc')->first();
    }
}

我想在我的其他型号上使用相同的方法。最好的方法是什么?

1 个答案:

答案 0 :(得分:6)

你可以用两种方式解决这个问题。

使用您在所有其他模型中扩展的抽象类,而不是Model

use Illuminate\Database\Eloquent\Model;

abstract class BaseModel extends Model
{
    public static function last() {
        return static::orderBy('created_at', 'desc')->first()
    }
}

所以你将拥有以下

class Article extends BaseModel
{

}

或者更恰当的是,正如你所指出的那样,有一个特征

trait Lastable {

    public static function last()
    {
        return static::orderBy('created_at', 'desc')->first();
    } 

}

您在所需的课程中使用。

class Article extends Model {
    use Lastable;
}