将静态方法放在Laravel模型中是一种好的做法吗


Is it good practice to put static methods in Laravel models?

我是Laravel和MVC开发的新手。

我有一个从CSV文件导入数据的方法。每一行代表一个用户,以及与该用户相关的文档。

导入功能检查用户是否存在(基于CSV中的登录字段),如果不存在,则创建新用户。然后它为该用户创建一个新的UserDocument。

我的用户模型中有一个createIfNotExists()方法:

public static function createIfNotExists($username, $password)
{
    $userId= DB::table('users')->where('login', $username)->pluck('id');
    if(is_null($userId))
    {
        $user = new User();
        $user->setHasher(new Cartalyst'Sentry'Hashing'NativeHasher);
        $user->login = $username;
        $user->email = $username;
        $user->password = $password;
        $user->save();
        return $user;
    }
    return User::find($userId);
}

我在csv导入方法中这样调用该方法:

$user= User::createIfNotExists($userLogin, $userPassword);

两个问题:

  • 在User模型中使用createIfNotExists()方法是一种好的做法吗?还是应该在别的地方?

  • 它是一种静态方法,这是一种好的实践吗?

您可能需要查看Eloquent中的firstOrCreate()方法,以实现您在示例代码中所做的工作。

在模型中包含静态方法是可以的,尤其是作为方便的方法,但尽量少用它们,不要让模型变得太胖(测试静态方法可能很困难)。