*これは Laravel 3 (Fluent を使用) ではなく、Laravel 4 に関する質問です。
Laravel 4 で DB クラスを拡張することは可能ですか?
私はこれと同じくらい簡単なことを試しました:
class Content extends DB {}
これを私のルートで:
print_r(Content::table('content')->get());
そして、「コンテンツ」を「DB」のように使えばうまくいくようです。
しかし、Eloqeunt の場合と同じようにデフォルトでテーブル名を設定しようとすると、where や join などの関数を使用すると、次のようなエラーが発生します。
print_r(Content::where('id', '!=', 4)->get());
これをエラーとして:
call_user_func_array() はパラメーター 1 が有効なコールバックであることを想定しています。クラス 'Illuminate\Database\MySqlConnection' にはメソッド 'where' がありません
効果的に私がやりたいことは、このようなものです。これにより、多くの結合/場所を実行する関数を追加できますが、DB を使用する通常のフローに統合できます。したがって、クラスは次のようになります。
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::table(); を使用すると DB が何か他のものを返すため、DB 以外の別のクラスを拡張する必要があることに関係していると思います。しかし、私はLaravelのコードをたどって何が起こっているのかを見つけるのに本当に苦労しています.illuminateと関係があるようですが、正直なところ、それが何であるかはよくわかりません. また、Eloquent を調べて、それがどのように機能するかを確認しようとしましたが、Laravel を見て、何が起こっているのかを理解するのが非常に難しいことがわかりました。