*注意這是關於Laravel 4而不是Laravel 3(它使用Fluent)的問題Laravel 4 - 是否可以擴展DB類?
是否可以在Laravel 4中擴展DB類?
我已經試過這樣簡單的事情,因爲這:
class Content extends DB {}
有了這個在我的路線:
print_r(Content::table('content')->get());
而且它似乎就上班使用「內容」,如「DB」 。
但如果我嘗試,默認情況下類似設置的表名如何在Eloqeunt會和使用功能,如地方或加入我得到一個錯誤,像這樣:
print_r(Content::where('id', '!=', 4)->get());
以此爲錯誤:
call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Database\MySqlConnection' does not have a method 'where'
實際上我想要做的就是這樣的事情。因此,我可以添加一個函數,它執行多個連接/哪裏,但將它集成到使用數據庫的正常流程中。因此,類是這樣的:
class Content extends DB {
public $table = 'content';
public static function joinPermissions($permission_mask)
{
return self::where('permissions.mask', '=', $permission_mask)
->where('permissions.read', '=', 1)
->join('permissions', 'id', '=', 'content.permission_set');
}
}
它會被稱爲像這樣:
Content::orderBy('time_added')
->take(10)
->joinPermissions($permission_mask)
->get();
這可能嗎?我想這是需要擴展除DB以外的其他類的事情,因爲當您使用DB :: table()時,DB會返回其他類。但我真的很努力遵循Laravel的代碼,並發現正在發生的事情,這似乎是與照明有關,但說實話,我不確定那是什麼。我也試着看看雄辯,看看它是如何做到的,但我再次發現Laravel很難查找並理解發生了什麼。
數據庫的方法(如「哪裏」,「加入」,等等)都在照亮\數據庫\查詢命名空間中的生成器類的一部分,而不是DB類。你想要做什麼?可能比擴展執行數據庫交互的類更好。通常我會將「some_extra_function()」添加到使用該函數的模型中。 – ARW
@AdamWathan我更新了這個例子來解釋更多。我基本上希望在使用數據庫的一般流程中包含函數,而不必編寫單獨的函數,如getWithPermissions() – robjbrain
類似於Builder類的聲音就是你想要擴展的東西,那麼應該能夠在那裏添加這些方法。我不確定自己完全明白你想要做什麼,所以我不能提出更好的方法,但我仍然認爲用這種非常具體的行爲來擴展這個類可能不是最好的解決方案。您是否打算將這些東西與Eloquent一起使用,或者您只是使用了數據庫組件,並將事情做得更加「生硬」?什麼是「內容」類應該代表什麼? – ARW