2014-04-27 61 views
0

目前我有一個模型。在模型中重用對象

我在這個模型中,這些自定義的方法:

public static function listing() 
{ 
    $query = self::with('user', 'group', 'category', 'replies', 'club.country', 'club.membership.package', 'club.product'); 

    return $query->orderBy('updated_at', 'DESC')->paginate(20); 
} 

public static function total() 
{ 
    return self::query()->count(); 
} 

public static function open() 
{ 
    return self::query()->where('status', '!=', 2)->count(); 
} 

public static function search($search) 
{ 
    $query = self::with('user', 'group', 'category', 'replies', 'club.country', 'club.membership.package', 'club.product'); 

    $query->where('subject', 'LIKE', '%'. $search .'%'); 

    return $query->orderBy('updated_at', 'DESC')->paginate(10); 
} 

當我在同一時間listing()search() + total()open()我相信它會返回3個對象使用。

所以我想知道是否有可能在模型中的任何地方注入/製造可用對象返回的對象self::query()

現在,不是在所有這些自定義方法中調用/調用self::query()self::with(),而是可以引用現有對象。

+0

究竟什麼是你想實現這個代碼? –

+0

我不想在每次執行'self :: query()'時重新創建一個對象,就這些。 – user2094178

+0

我問你想要什麼,而不是你不想做的。 –

回答

1

您的要求似乎什麼是scopes

<?php 
class Model extends Eloquent { 
    public function scopeTotal($query) { 
     return $query->count(); 
    } 

    public function scopeOpen($query) { 
     return $query->where('status', 1); 
    } 
} 

,然後用它像Model::open()->get()status一套讓所有行1,或Model::open()->total()計算的行數,其中status等於1

+0

最好返回'$ query',這樣方法鏈就可以了。 –

+0

我很感謝你的回答Marwelln,但我不是在尋找範圍。 – user2094178