php Laravel Eloquent与MVC原则

bxpogfeg  于 2023-04-10  发布在  PHP
关注(0)|答案(2)|浏览(109)

我对laravel很陌生。使用Laravel 8。当保存数据时,我在很多例子中看到了下面的方法。
在控制器中

$emp = new Employee();
$emp->emp_name = $request->emp_name;
$emp->emp_no = $request->emp_no;
$emp->email = $request->email;
$emp->save();

我的疑问是,根据MVC的原则,控制器是用来连接模型和视图的,这是一个正确的做法还是必须在模型中做这一部分?
我正在寻找一些指导来学习最佳实践。

vhmi4jdf

vhmi4jdf1#

您也可以尝试以下方式:

型号

class Employee extends Model
{
    protected $fillable = ['emp_name', 'emp_no', 'email'];
}
$emp = Employee::create($request->all()); // generally i avoid this way
$emp = Employee::create($request->only(['emp_name', 'emp_no', 'email']));
ykejflvf

ykejflvf2#

在MVC架构中,模型层负责管理数据,包括验证、存储和检索数据等任务;控制器层处理用户的输入并控制应用程序的流程;视图层负责向用户呈现UI。
在您提供的代码中,控制器正在创建Employee模型的新示例,设置其属性,然后调用保存方法将数据持久化到数据库。这是Laravel中的常见做法,并且完全可以接受这样做。
然而,为了严格遵守MVC原则,持久化数据的逻辑最好放在模型层。您可以在Employee模型中创建一个方法,它接受一个数据数组并处理保存过程。这样,控制器只需要将数据传递给模型,模型会处理其余的事情。
在控制器中

$emp = new Employee();
$emp->saveEmployee($request->all());

在模型中

class Employee extends Model
{
    protected $fillable = ['emp_name', 'emp_no', 'email'];

    public function saveEmployee($data)
    {
        $this->fill($data);
        $this->save();
    }
}

在这个重构的代码中,控制器只是将请求数据传递给模型中的saveEmployee方法,模型负责将数据保存到数据库。
这种方法让模型负责管理数据,而控制器只是充当模型和视图之间的中介。这是一个很好的实践,因为它使您的代码更有组织,更容易维护,并遵循MVC原则。

相关问题