2013-07-11 88 views
2

我正在開發一個工作臺環境中的包。我有一個像Laravel模型獲取類的實例

<?php namespace Vendor\Webshop\Models; 

use Vendor\Webshop\Models\Country as Country; 
use Illuminate\Database\Eloquent\Model as Eloquent; 

/** 
* A catalog 
*/ 
class Catalog extends Eloquent { 

    // Define the database 
    protected $table = 'catalogs'; 

    // Mass assignment restriction 
    protected $guarded = array('id'); 

    // Return the countries related to this catalog 
    public function countries() { 
     return $this->belongsToMany('Vendor\Webshop\Models\Country'); 
    } 

    /** 
    * Returns whether to enforce the compability check or not 
    */ 
    public function getForceCompabilityTest() { 
     return $this->force_compability_check; 
    } 

} 

?> 

一個模式,我想知道如果我能有自定義實例干將像

public function getDefaultCatalogs() { 
    return Catalog::where('is_default_catalog', '=', true)->get(); 
}} 
類本身內

。這是可能的還是隻能用於具體實例的方法,我可以從課外從Catalog::getDefaultCatalogs()中調用它們嗎?

+0

你試過類似 'Vendor \ Webshop \ Models \ Catal og :: getDefaultCatalogs()' –

+0

它沒有太多關於命名空間,更多關於該方法的靜態調用,「從課外」有點誤導,sry – pfried

回答

3

Laravel雄辯支持這種行爲 - 這是呼叫「查詢作用域」 http://laravel.com/docs/eloquent#query-scopes

在模型中,以這樣的:

class Catalog extends Eloquent { 

    public function scopeDefault($query) 
    { 
     return $query->where('is_default_catalog', '=', true); 
    } 

} 

然後,你可以用這個電話

檢索記錄
$defaultCatalog = Catalog::default()->get(); 

// or even order them, if there are more than 1 default catalog. And so on... 
$defaultCatalog = Catalog::default()->orderBy('created_at')->get(); 
+0

這是很好的知道,可能對我有用,thx – pfried

0

我剛剛將該方法作爲靜態方法添加到Eloquent模型中,並且工作正常。如果有人對此有評論,請告訴我。

public static function getDefaultCatalog() { 
    return Catalog::where('is_default_catalog', '=', true)->firstOrFail(); 
}} 
+0

查看我的答案。你的解決方案也很好,但是通過這段代碼,你不能在'getDefaultCatalog'之後鏈接另一個方法調用。 – Andreyco