2016-03-16 62 views
1
<?php 

class Page extends Eloquent { 

} 

class Article extends Page { 
    function __construct($attributes = []) { 
     parent::__construct($attributes); 
     $this->where('type', 'article'); 
    } 
} 

$articles = Article::all(); 
// SELECT * FROM pages WHERE type = 'article' 

頁表有多種類型的數據,我想這些數據通過模型類分開,我嘗試了上面的查詢,但where()功能甚至被稱爲在__constructor()與不同的模型擴展雄辯模型

+0

檢查我更新的答案。 – nextt1

回答

0
<?php 

class Page extends Eloquent { 

} 

class Article extends Page { 
    function __construct($attributes = []) { 
     if($attributes) { 
      $attributes['type'] = 'article'; 
     } 
     parent::__construct($attributes); 

    } 
    public function newQuery() { 
     return parent::newQuery()->where('type', 'article'); 
    }  

} 

$articles = Article::all(); 
// SELECT * FROM pages WHERE type = 'article' 
1

您只需要在Model中執行scope。因此請檢查Query Scope但它必須在model類中定義。如果你想要一個單獨的課程,使用scope作爲查詢退款的基礎global scopehttps://softonsofa.com/laravel-how-to-define-and-use-eloquent-global-scopes/

+0

我將不得不每次創建1個'Trait'和1'Scope Class'。這是唯一的解決方案嗎? –

+0

如果你想要一個單獨的課程,那麼是的。 「全球範圍」是唯一的選擇。大多數情況下,查詢範圍都可以解決問題。 – nextt1

+0

你的班級將有更多的方法,但你不必擔心分開的班級。 – nextt1