9

我一直在看 Laravel 一段时间,我决定最终拿起它。这是我第一次使用 PHP 框架,我在理解模型的目的时遇到了一些麻烦。

我一直在阅读很多新手指南,这几乎就是他们模型中的全部内容(Laravel 明智),

class Model extends Eloquent {

}

然后在他们的控制器中他们做这样的事情,

$model = new Model;
$model->text = "text";
$model->save();

我不是 MVC 模式的专家(可能是那里最大的新手),但我认为重点(或至少是一小部分)是将很多动作分开。并且该模型应该负责处理数据库方面的所有事情。所以在某种程度上,这对我来说似乎是错误的,或者至少不是最佳实践。

但是,如果您开始设置一堆函数,您可能会遇到为每个表设置一个模型的问题。这又似乎不对。所以你必须在某种程度上使模型模棱两可。从某种意义上说,它可以对任何桌子采取任何行动?

此刻,这一切对我来说似乎真的很混乱。

4

2 回答 2

14

您将需要一个模型用于 evey 表,因为与模型相关的其他内容无法共享,例如列名和验证,但是如果您认为自己在重复,您可以创建一个 BaseModel 并添加所有方法,甚至在其中重载 Eloquent 方法:

class BaseModel extends Eloquent {

    public function whatever() {

    }

    public function save(array $options = []) {
        // do what you need to do
        parent::save();
    }

}

然后使用它创建模型:

class Order extends BaseModel {

}

但是你不需要太多的模型,如果你的模型和表名遵循 Laravel 模式(在这种情况下,表名将是“订单”),那么你只需要这个简单的声明来让一个模型为你的表工作。

编辑:

控制器旨在将数据从模型传输到视图,但它们不应该对您的数据了解太多,几乎所有关于它们的东西都应该存在于您的模型中(“胖模型,瘦控制器”),因此它们需要知道的足够多拥有“控制权”。

class OrdersController extends BaseController {

    public function process()
    {
        $order = Order::find( Input::get('orderId') )->process();

        return View::make('orders.showProcessedOrder')->with('order',$order);
    }

}
于 2013-07-27T15:55:46.673 回答
0

模型是数据库表的包装器。您的数据库表是您正在制作应用程序的真实事物。模型允许您使用您的编程语言进行 CRUD(创建、读取、更新或删除)数据。OOP 完全是关于类和对象,并将诸如传入的 HTTP 请求和数据存储之类的东西转换为那种形式。

你的问题很好。当你学习如何制作 Web 应用程序时,拥有一个三层的 Web 应用程序——一个表示层、一个业务逻辑层和一个数据存储层,数据存储在关系数据库中——效果很好,而且添加它没有任何意义代码中增加了一层与数据库相关的东西。

而且,正如 Antonio 所写,在 MVC 编程中,“胖模型,瘦控制器”是您正在努力的方向。理想情况下,控制器应该只是几行代码,将传入请求传递给正确的模型,在那里可以对其进行验证、添加到数据库等。(但最简单的方法是在您第一次将其放入控制器中学习/弄清楚MVC。)

于 2014-01-11T19:00:39.053 回答