2015-05-22 85 views
2

你能幫助我嗎?我目前正在自學Laravel,我遵循Laracasts的教程,它很棒。在Laravel之前,我在我的項目中使用CodeIgniter和Opencart,並開始學習Laravel,因爲我想學習一個新的框架。在Laravel中使用模型的正確方法是什麼?

在CI和Opencart中,所有數據庫查詢都在模型中。但是在Laravel中,您可以在Controller中執行和查詢?這是Laravel查詢的正確方法嗎?

我有這種代碼在控制器:

<?php namespace App\Http\Controllers; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 

use App\Article; 
use Illuminate\Http\Request; 

class ArticlesController extends Controller { 

    public function index() { 

     $articles = Article::all(); 

     return view('articles.index')->with('articles', $articles); 

    } 

} 
+1

如果您有laracasts帳戶,看看這個:https://laracasts.com/search?q=repositories&q-where=lessons –

+1

還有一句: http://ryantablada.com/post/the-repository-pattern-in-action –

回答

1

存儲庫對您來說是一個明智的決定。但爲什麼?
基本上,存儲庫是您的應用程序和存儲之間的「網關」。
通過存儲庫,您可以在一個地方找到「數據庫查詢」。

讓我們來思考模型文章。
而不是使用文章的靜態實例,您需要使用它(Articles::find(),Articles::all()等),只需創建文章的存儲庫。
在您的控制器中注入此回購(例如),並使用存儲在您的ArticleRepository中的'features'。

你是什麼意思?
讓我們考慮文章的存儲庫。我將在我的文章模型應用中使用多次?我需要全選,按ID選擇,插入,更新,刪除。基本上這些'東西'。那麼,如果我把這些東西放在一個地方?

class ArticleRepository { 

    public function all(){} 
    public function getById($id){} 
    public function insert($data){} 
    public function update($data){} 
    public function delete($id){} 

} 

在控制器中注入此ArticleRepository。要做到這一點,讀了關於IOC容器的位置:http://laravel.com/docs/5.0/container

在你的控制器的結構將是這樣的:

public function __construct(ArticleRepository $articles) 
{ 
    $this->articles = $articles; 
} 

一旦所有,​​當你需要得到所有文章在你的控制器,只是做:

public function index() 
{ 
    $articles = $this->articles->all(); 
    return View::make('articles.index')->with(['articles' => $articles]); 
} 

通過這種做法,您可以使用testables控制器和美觀的組織和設計進行清潔應用。 ;)

看,我試圖儘可能地說服你,以瞭解這個概念。存儲庫的使用不僅是一種方法。所以我讓評論中的鏈接。並讓其他參考也在這裏。
我相信你會很快理解。
成功學習! :)

https://laracasts.com/search?q=repositories&q-where=lessons
http://ryantablada.com/post/the-repository-pattern-in-action
http://culttt.com/2014/03/17/eloquent-tricks-better-repositories/
http://culttt.com/2013/07/15/how-to-structure-testable-controllers-in-laravel-4/

+0

感謝您的明確解釋。我也會檢查你的參考鏈接。 :) – Jerielle

3

是的,這是對小應用完全沒有問題。 但是,對於大型應用程序,我建議使用存儲庫,因爲它們將模型與控制器分離 - 這使得它們更具可讀性和可測試性。

你ArticlesController將轉化爲這樣的事情:

<?php namespace App\Http\Controllers; 

use App\Repositories\Articles\ArticleRepositoryInterface; 

class ArticlesController extends Controller { 

    private $articles; 

    public function __construct(ArticleRepositoryInterface $articles) 
    { 
     $this->articles = $articles; 
    } 

    public function index() 
    { 
     return view('articles.index') 
      ->with('articles', $this->articles->all()); 
    } 

} 

看一看Laravels Service Container瞭解ArticleRepositoryInterface的自動解決。 Laracasts在存儲庫上有一些很好的視頻。

+0

感謝您的好解釋。我會閱讀有關的。 :) – Jerielle

相關問題