我正在建立一个Laravel 5.1项目,并且我已经取得了很好的进展,但已经遇到了一些我正在努力解决的问题。
基本上,我一直在创建在我的控制器方法中插入数据库的对象。这并不是太糟糕,因为它们通常是单行的。
然而,我遇到了一个更复杂的数据库条目,我的控制器变得有些混乱。让我告诉你:
/**
* Store a new ticket for the specified project.
*
* @param int $id
* @param TicketsRequest $request
* @return Response
*/
public function store_ticket($id, TicketsRequest $request)
{
$user_id = Auth::user()->id;
$project_id = $id;
$project_tickets = Ticket::whereProjectId($id);
$project_ticket_id = $project_tickets->count() + 1;
$ticket = new Ticket;
$ticket->user_id = $user_id;
$ticket->project_id = $project_id;
$ticket->project_ticket_id = $project_ticket_id;
$ticket->title = $request->title;
$ticket->save();
$ticket_update = new TicketUpdate;
$ticket_update->user_id = $user_id;
$ticket_update->ticket_id = $ticket->id;
$ticket_update->status_id = $request->status_id;
$ticket_update->priority_id = $request->priority_id;
$ticket_update->assigned_to = $request->assigned_to;
$ticket_update->description = $request->description;
$ticket_update->save();
return redirect('/projects');
}
正如您所看到的,我正在创建一个保存到数据库的故障单,然后还创建一个保存到数据库的故障单更新。
我想要做的是将此代码解压缩为“某事”以清理我的控制器。
在我的旅行中,我发现可能创建存储库可能是前进的方向。否则我在考虑某种服务,但我并不确信这是前进的方向。
我订阅了Laracasts并发现了以下视频,但它有点过时,我确信这仍然是在Laravel 5.1中做到这一点的'正确'方式(我发现事情似乎有一个与旧版本相比,5.1中的自然之家。)
https://laracasts.com/lessons/repositories-simplified
任何建议/链接等都会很棒。谢谢!
答案 0 :(得分:0)
如果经常使用相同的属性集实例化对象,则可以轻松地将该代码提取到模型构造函数中,例如:
//in your model
public function __construct($user_id, $ticket_id, $request) {
$this->user_id = $user_id;
$this->ticket_id = $ticket_id;
$this->status_id = $request->status_id;
$this->priority_id = $request->priority_id;
$this->assigned_to = $request->assigned_to;
$this->description = $request->description;
}
// in your controller
$ticket_update = new TicketUpdate($user_id, $ticket->id, $request);
$ticket_update->save();
答案 1 :(得分:0)
您的实施没有错。我建议您在调用try catch
方法时使用save()
以防出现问题并向用户发送一个错误的错误,例如&#34;出现问题,请联系您的管理员&#34;。< / p>