将静态方法放在Laravel模型中是一种好习惯吗?

时间:2014-10-31 08:49:38

标签: php laravel static

我是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()方法是一种好习惯吗?或者它应该在其他地方?

  • 这是一种静态方法的好习惯吗?

1 个答案:

答案 0 :(得分:0)

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

在模型中包含静态方法很好,特别是作为方便方法,但请谨慎使用它们,不要让模型变得太胖(测试静态方法很难)。