2013-11-21 13 views
1

給定一個表稱爲交易,我有這樣一個模型:模型應該處理自身的多個值嗎?

class Transaction extends Eloquent { 
    // other methods including some scopes 

    public static function getInteresting() 
    { 
     $data = Transaction::with('location', 'user', 'type') 
     ->category(1) 
     ->salesGroup(3) 
     ->confirmed(); 

     return $data->get(); 
    } 
} 

所以,讓我們說,這些「有趣」的交易非常頻繁使用的 - 我應該從交易模式返回多個交易?如果不是,那麼代碼應該在哪裏存在?

+4

[活動記錄](http://martinfowler.com/eaaCatalog/activeRecord.html)實例不是「型號」 –

回答

1

我不會添加這樣的靜態方法。我一直在使用Respositories來處理這種情況,其中有幾個地方使用了一些常見的數據庫交互。作爲獎勵,如果您以後需要更改數據源,則會抽象出複雜的數據邏輯。

我看到你也知道範圍,所以你也可以創建一個範圍,並在其中包含上述所有內容。

public function scopeInteresting($query) 
{ 
    $query->with('location', 'user', 'type') 
     ->category(1) 
     ->salesGroup(3) 
     ->confirmed(); 
} 

$transactions = Transaction::interesting()->get(); 
1

我認爲,存儲庫是很好的解決方法放置代碼。它們帶來了很大的靈活性,並從控制器中分離了模型。我用它們爲我的控制器提供了兩個數據庫實現--mongo和mysql。你可以創建你自己的服務層,但你的代碼與db有關,所以你可以選擇使用它。

+0

爲什麼您的控制器會在意底下使用哪種存儲?或者即使有任何持久存儲** ...... –

1

在這裏我工作,我們使用三層來解決這個問題。

Entity代表(顯然)一個實體,如一個事務。它包含字段和設置者到這些字段的獲取者。

DAO提供了訪問與特定實體有關的數據庫的方法。

BO提供了執行我們應用程序業務邏輯的方法。

因此,在您的情況下: DAO\Transaction將執行查詢,並返回多個Entity\Transaction實例。

希望這會有所幫助。

相關問題