Php 使用依赖注入更新模型
我将我的模型和控制器转换为支持依赖注入,它运行得很好,但有一件事我有点挣扎。如何更新存储库实例?假设我有以下代码:Php 使用依赖注入更新模型,php,laravel,Php,Laravel,我将我的模型和控制器转换为支持依赖注入,它运行得很好,但有一件事我有点挣扎。如何更新存储库实例?假设我有以下代码: $upload = Upload::find($id); $upload->receiver_email_id = $mailAdress->id; $upload->sender_email_id = $mailAdress2->id; $saved = $upload->save(); 所以我得到了模型,更新了email_id并再次保存。现在,依
$upload = Upload::find($id);
$upload->receiver_email_id = $mailAdress->id;
$upload->sender_email_id = $mailAdress2->id;
$saved = $upload->save();
所以我得到了模型,更新了email_id并再次保存。现在,依赖注入是如何进行的呢
$upload = $this->upload->find($id);
现在我有了我的模型。现在最优雅的更新方式是什么?
比如:
$upload->update(array(
'receiver_email_id' => $mailAdress->id,
'sender_email_id' => $mailAdress2->id
));
或者类似的
$upload->receiver_email_id = $mailAdress->id;
$upload->sender_email_id = $mailAdress2->id;
$saved = $upload->save($upload);
我在哪里传递完整的上传对象并在存储库中处理保存
不知道我为什么要和这个做斗争。或者我把事情复杂化了,有一个简单的解决方案?你的两种方法都是正确的,我看不出有任何问题 如果您有一个项目数组,只需使用
update()
,即可节省几行代码
$upload->update(Input::all());
另一方面,如果您有一些变量并且想要更新模型,那么最好的方法是将它们指定给模型对象
$upload->receiver_email_id = $mailAdress->id;
$upload->sender_email_id = $mailAdress2->id;
$upload->save();
如何构建存储库取决于您。我倾向于将您的第一种方法主要用于我的存储库
class UploadRepository {
public function findById($id)
{
$upload = Upload::find($id);
if ( ! $upload )
throw new NotFoundException("Upload model with id:$id was not found");
return $upload;
}
public function update($id, array $data)
{
$upload = $this->findById($id);
$upload->update($data);
$this->validate($upload->toArray());
return $upload->save();
}
public function validate(array $data)
{
$validator = Validator::make($data);
if ($validator->fails())
throw new ValidationException($validator);
}
}
显然,用您需要的其他方法填充repo,但这样您可以简单地将Input::all()
的结果从控制器传递到repo
// Considering this a resource controller
class UploadController extends BaseController {
public function __construct(UploadRepository $repo)
{
$this->repo = $repo;
}
public function update($id)
{
return $this->repo->update($id, Input::all());
}
}
我不是100%确定你真正想做什么,但似乎你把事情复杂化了。简而言之,DI就是在另一个类中使用一个类,这样它就可以工作。因此,如果您有一个自定义类(UploadService),而您的另一个类(Upload)需要该类才能工作,那么只需通过一个_构造函数方法启动它即可。这正是我想要的。tyvm