Laravel在存储库中的质量分配

时间:2013-12-26 13:14:24

标签: php laravel laravel-4

我正在使用Laravel 4.1框架的批量分配功能,当我决定通过添加存储库来使控制器更加灵活时,问题就开始出现了。使用此模式时,我不太了解如何将标准Eloquent方法实现为fill()save()

这是我的存储库代码:

class EloquentUserRepository implements UserRepository
{
    public function paginate($perPage = 15, $order = 'ASC', $orderBy = 'id')
    {
        return User::orderBy($orderBy, $order)->paginate($perPage);
    }

    public function getInstance()
    {
        return new User;
    }

    public function findAll()
    {
        return User::all();
    }

    public function find($id)
    {
        return User::find($id);
    }

    public function fill(array $data)
    {

    }

    public function update(array $data)
    {}

    public function save()
    {}

    public function create(array $data)
    {
        return User::create($data);
    }

    public function delete($id)
    {
        $user = User::find($id);
        if ($user)
        {
            return $user->delete();
        }
        return false;
    }
}

有没有人做过类似的事情?谢谢。

1 个答案:

答案 0 :(得分:0)

也许这不是“存储库”类的角色。看一下存储库的含义:“存储和存储事物的地方”。我想你必须找到另一种模式。

您可以使用一种程序方法:

UserSaver::fill($user, $arrayOfAttributes);
UserSaver::save($user);

或者在用户类之上构建一个类:

$abstractUser = new AbstractUser($user);
$abstractUser->fill($arrayOfAttributes);
$abstractUser->save();

我确信其他(可能更好)的模式存在。

我不是所有这些模式的忠实粉丝,因为我认为Eloquent已经是一个很好的抽象层(或者因为我的项目太小)。如果我想更改all()save()的实现,我会在特定模型或我的类BaseModel中覆盖它们,后者继承所有其他模型。我还使用saving和很多query scopes等事件。然后我的模型和控制器层非常松散耦合。