2016-08-19 5 views
2

私は、クエリビルダを使用すると、データベーステーブルの名前を非常に多く、別のファイルに書き込むことに気付きました。データベースのテーブル名を変更する場合は、プロジェクトでかなり多くの行を検索して変更する必要があります。 これはあなたのLaravelの人に気づいて解決策を思い付く問題ですか?Laravelのクエリビルダーとテーブルの名前

データベース名の代わりにクラスモデルを使用するEloquentアプローチが好きです。しかし、いくつかのクエリでは、クエリビルダはより良い解決策であると私は思っています(ただし、私はこの問題に関して専門家ではありません)。クエリで

答えて

-1

どのようにOOPの概念を使用してについて。 Laravelはフレームワークなので、誰もあなたが基本的なPHP OOPの概念を使用するのを止めません。これは私が何をすべきかです:

は私のクエリは似ている考えてみましょう:

$result=DB::table('myTable')->select()->get(); 

は私がやっていることは、すべてのテーブル名を保持するクラスを作るです:

class TableName 
{ 
    private $tableName= "myTable"; 
    public function getTableName() 
    { 
     return $this->tableName; 
    } 

    public function setTableName($table_name) 
    { 
     $this->tableName = $table_name; 
    } 
} 

今私がしなければならないすべてはされますファイル内のオブジェクトを使用してメソッドを呼び出します。

$name = new TableName() ; 
$result=DB::table($name->getTableName())->select()->get(); 

どこでも使用してくださいnt。私はそれが私のために働く最高の解決策だとは思わない。希望することができます。

+0

ありがとうございます。私はそれを試みるかもしれない。 – Olof84

2

使用これを:

(new YourModel())->getTable() 

例:

DB:raw('SELECT * FROM '.(new User())->getTable().' WHERE id=3'); 
+0

興味深い。生のものを使わずにこれを行うことができますか? – Olof84

+0

はい、このコードはテーブル名を取得するだけで、それをevrywhereで使用することができます。これは、コードを追加するより簡単ですが、これは他の答えより優れた解決策だと思います。 – neoteknic

+0

モデルがない場合があります。たとえば、既にシステムが構築されている場合(マジェンタなど)今ではそのデータベースを使いたいと思うので、テーブルがあなたのやり方で来ないのでモデルを作ることはできません。あなたはそれを選択するだけです。しかし、通常のモデルでは、あなたのソリューションは完璧です+1 –

関連する問題