我正在使用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;
}
}
有没有人做过类似的事情?谢谢。
答案 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等事件。然后我的模型和控制器层非常松散耦合。