我应该在Laravel MVC中保存模型?

时间:2018-02-26 20:42:11

标签: laravel model-view-controller updating service-layer

我正在尝试更加具体地了解MVC并尽可能保持控制器层的薄。

我一直在问自己的一件事是“我应该在哪里打电话给modelname-> save()?”

查看Laravel文档,他们将数据设置为模型并在控制器中调用save似乎不正确...

<?php

namespace App\Http\Controllers;

use App\Flight;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class FlightController extends Controller
{
    public function store(Request $request)
    {
        // Validate the request...

        $flight = new Flight;

        $flight->name = $request->name;

        $flight->save();
    }
}

这是一个非常简单的例子,可能就是他们在控制器中完成所有操作的原因。

根据我的理解和我一直在阅读的所有内容,所有业务逻辑都应该位于模型中,控制器负责视图和模型之间的“流量控制”。

那么我会在模型内部调用save吗?或者我应该使用服务层吗?

以下是我目前的示例数据问题。

我正在更新模型的状态。该行已存在于DB中。我使用PATCH / route /来获取控制器方法。从那里我得到了模型。

class TimecardController extends Controller {
...
    public function markAsPass(Request $request, $id) {
        $test = Test::findOrFail($id);

        //I don't think this is the corect way  
        //$test->status = "passed";
        //$test->markedBy = "Teacher123";
        //$test->save();


        $test->passed();
        ...
        return redirect($redirect_url);
    }
}

class Test extends Model {
...
    public function passed() {
        $this->status = "passed";

        //would I call save here? 
        //$this->save();
    }
}

我采取上述方法吗?或者我是否创建一个服务层,我将使用模型实例调用模型函数,然后在模型上调用save?

//in service class
public function makeTestAsPassed($test){
    $test->passed();
    $test->save();

}

如果需要任何条款,请告诉我。

1 个答案:

答案 0 :(得分:0)

MVC旨在简化维护。 你不认为“好”的方法是正确的方法。与业务逻辑相关的所有数据处理都在控制器中。否则,不同的编码器会因为他/她在控制器代码中找不到数据操作逻辑而感到困惑。

你的瘦控制器目标击败了MVC。

另请注意,模型代码的目的是为了精简,因为它是将数据库模式定义为数据库表的镜像的地方。

MVC不是面向对象的abstration。 MVC是一种代码维护一致性的结构。