2014-05-16 82 views
0

我有一個表Schedule,它具有以下列:id, day, month, year。直接使用Eloquent,我已經爲daymonthyear定義了查詢函數。那麼我可以用得到的時間表:Laravel Eloquent知識庫查詢積累

return Schedule::day($day) 
       ->month($month) 
       ->year($year) 
       ->get(); 

我有時也希望得到所有的日子,或者幾個月,或者幾年:

return Schedule::day($day) 
       ->get() 

我想創建一個存儲庫,並實現以下接口:

ScheduleRepositoryInterface

<?php 
namespace CLG\Storage\Schedule; 

interface ScheduleRepositoryInterface 
{ 
    public function day($day); 
    public function month($month); 
    public function year($year); 
    public function get(); 
} 

現在我不知道如何實現它,以便我仍然可以用相同的方式構建查詢?我不想創建諸如getDay($day)getDayAndMonth($day, $month)和...的功能。

感謝

回答

0

interface應該是:

interface ScheduleRepositoryInterface 
{ 
    public function day($day = null); 
    public function month($month = null); 
    public function year($year = null); 
} 

Concrete Class實現可能是這樣的:

public function scopeDay($query, $day = null) 
{ 
    return is_null($day) ? $query : $query->whereDay($day); 
} 

您可以使用下面的代碼( '選擇'),只選擇day專欄:

return is_null($day) ? $query->select('day') : $query->whereDay($day)->select('day'); 

同樣,您可以爲monthyear聲明其他函數。