2014-03-01 29 views
3

我的索引页使用3个数据库中的表:多个表 - Laravel

  • index_slider
  • index_feature
  • footer_boxes

我使用一个控制器(IndexController.php)并拨打这样的三个模型:

public function index() { 
return View::make('index') 
->with('index_slider', IndexSlider::all()) 
->with('index_feature', IndexFeature::all()) 
->with('footer_boxes', FooterBoxes::all()); 
} 

三个模式上述需求::所有()数据,所以他们都设置这样的:

class IndexSlider extends Eloquent { 
public $table ='index_slider'; 
} 

注:每个模型类名称更改

见此因为我的索引页面需要这3个表格,而且我正在重复每个模型中的语法,那么我应该使用多态关系还是将其设置为不同?从我读过的ORM应该有每个表格1个模型,但我不禁感到这将是愚蠢的,在我的情况和许多其他人。 DRY(不要重复自己)在某种意义上失去意义。

什么是最好的方法来采取这里或我在正确的轨道上?

+2

对于每个表,ORM确实需要一个类。 只有在类有共同点的情况下才使用polymorfism。 这不是因为您在一个视图中使用3个模型,您应该将所有这些模型放在一起。这与彼此没有任何关系...... 我想说你是在正确的轨道上,但你似乎需要更多的基本MVC结构阅读 – Gregory

+0

感谢您的回应。如果不是多态现象,那么**一对多**是一种替代方法?我最近一直在采用MVC结构,所以你是对的,我会进一步研究并获得更多的理解。 – Panoply

+0

CRUD与MVC模式无关 –

回答

9

首先,我应该说每个模型都是为特定的表格编写的,除非它们相关,否则不能将三个表格合并到一个模型中。 See Here

有两种方法可以让您的代码更干爽。 而是通过你的数据在withs链的我会通过它在你的化妆第二个参数:

public function index() { 
    $data = array(
     'index_slider' => IndexSlider::all(), 
     'index_feature' => IndexFeature::all(), 
     'footer_boxes' => FooterBoxes::all(), 
    ); 

    return View::make('index', $data); 
} 

传递数据作为第二个参数。 See here

另一种方式我会去做,如果您的应用程序将会变得更大,这是一个更好的解决方案,即创建一个服务(另一个模型类,但没有连接到雄辩),当您打电话时返回必要的数据。如果您在多个视图中返回上述数据,我肯定会这样做。

使用服务将是这个样子的一个例子:

<?php 
// app/models/services/indexService.php 
namespace Services; 

use IndexSlider; 
use IndexFeature; 
use FooterBoxes; 

class IndexService 
{ 
    public function indexData() 
    { 
     $data = array(
      'index_slider' => IndexSlider::all(), 
      'index_feature' => IndexFeature::all(), 
      'footer_boxes' => FooterBoxes::all(), 
     ); 

     return $data; 
    } 
} 

和控制器:

<?php 
// app/controllers/IndexController.php 

use Services/IndexService; 

class IndexController extends BaseController 
{ 
    public function index() { 
     return View::make('index', with(new IndexService())->indexData()); 
    } 
} 

这项服务能少了很多具体的方法来扩大,你绝对应该改变命名(从IndexService和indexData到更具体的类/方法名称)。

如果你想使用服务的详细信息,我写了凉爽的一篇文章关于它here

希望这有助于!

+0

你完美地解释了这一点。非常感谢你。真的很感激它。 – Panoply