2014-03-01 83 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