Laravel 4型号,如何使用它们

And*_*eas 9 php laravel eloquent laravel-4

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

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

class Model extends Eloquent {

}
Run Code Online (Sandbox Code Playgroud)

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

$model = new Model;
$model->text = "text";
$model->save();
Run Code Online (Sandbox Code Playgroud)

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

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

这一切似乎让我感到困惑.

Ant*_*iro 14

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

class BaseModel extends Eloquent {

    public function whatever() {

    }

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

}
Run Code Online (Sandbox Code Playgroud)

然后使用它创建模型:

class Order extends BaseModel {

}
Run Code Online (Sandbox Code Playgroud)

但是你在模型上不需要太多,如果你的模型和表名称遵循Laravel模式(在这种情况下,表名称将是'orders'),那么你只需要这个简单的声明就可以让模型适用于你的表.

编辑:

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

class OrdersController extends BaseController {

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

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

}
Run Code Online (Sandbox Code Playgroud)