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)