Laravel 4型号,如何使用它们

时间:2013-07-27 11:41:02

标签: php laravel laravel-4 eloquent

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

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

class Model extends Eloquent {

}

然后在他们的控制器中他们做了类似的事情,

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

我不是MVC模式的专家(可能是最大的新手),但我认为整点(或至少是一个小点)是分开很多行动。并且该模型应该负责处理所有数据库。所以在某种程度上,这对我来说似乎是错误的,或者至少不是最好的做法。

但是如果你开始设置一堆函数,你可能会遇到每个表都有一个模型的问题。再次,这似乎不对。因此,您必须以某种方式使模型模糊不清。从某种意义上说,它可以对任何表采取任何行动吗?

此刻,这一切似乎让我感到困惑。

2 个答案:

答案 0 :(得分: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模式(在这种情况下,表名称将是'orders'),那么你只需要这个简单的声明来使模型适用于你的桌子。

编辑:

控制器用于将数据从模型传输到视图,但是他们不应该对您的数据了解太多,几乎关于它们的所有内容都应该在您的模型中(“胖模型,瘦模控制器”),所以他们需要知道足够“控制”。

class OrdersController extends BaseController {

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

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

}

答案 1 :(得分:-1)

模型是数据库表的包装器(这是您正在编写应用程序的真实内容)。它们为您提供了一个用于存储数据的OO,基于代码的界面,您可以将特定于数据的逻辑放在模型中。 OOP是关于类和对象的,并将传入的HTTP请求和数据存储等内容转换为该形式。

你的问题很好。当您学习如何制作Web应用程序时,拥有一个三层Web应用程序 - 一个表示层,一个业务逻辑层和一个存储在关系数据库中的数据的数据存储层 - 效果很好,并且添加没有任何意义代码中额外的数据库相关内容。

而且,就像安东尼奥写的那样,在MVC编程中,“胖模特,瘦瘦的控制器”就是你正在努力的方向。理想情况下,控制器应该是几行代码,它们将传入的请求传递给正确的模型,在那里它可以被验证,添加到数据库等等。(但是在你第一次将它放在控制器中是最简单的学习/计算MVC。)