2016-11-28 7 views
2

私はLaravelを使用して、生のデータベースクエリを行う必要があります。生のオブジェクトからEloquentモデルインスタンスを作成するにはどうすればいいですか?

$results = DB::select("SELECT * FROM members 
    INNER JOIN (several other tables) 
    WHERE (horribly complicated thing) 
    LIMIT 1"); 

私はメンバー表のプロパティのフィールドを持つプレーンなPHPはstdClassオブジェクトを取り戻します。私はこのようになりますこれは、メンバー(雄弁モデルインスタンス)にそれを変換したい:

use Illuminate\Database\Eloquent\Model; 

class Member extends Model { 
} 

メンバーがそれに設定されたすべてのフィールドを持っていないので、私はそれを行う方法がわからないんだけど私はそれを正しく初期化しないことを心配しています。それを達成する最善の方法は何ですか?

あなたは、単に新しいモデルにinitができ
+0

あなただけにしようとしましたメンバーモデルを作成し、そこからデータを取得しますか? – GabMic

+1

あなたは何を意味するのか分かりません。 where句とinner joinをORMコードに変換することを意味するなら、それをしたくありません。 –

+0

データベースから正確に何を検索したいですか? – GabMic

答えて

2

あなたはオブジェクトをモデル化するために、あなたの結果を水和しようとすることができます:

$results = DB::select("SELECT * FROM members 
         INNER JOIN (several other tables) 
         WHERE (horribly complicated thing) 
         LIMIT 1"); 

$models = Member::hydrate($results->toArray()); 

それともあなたもLaravelの自動水和物にそれらを聞かせすることができますあなたのための生のクエリから:

$models = Member::hydrateRaw("SELECT * FROM members..."); 
+1

これはいいですが、モデルのコレクションを取得します。 'LIMIT 1'はここでは意味がありません。 – sleepless

+1

私はこれをやると、もはや人間関係を選択できません...どうしてですか? –

-1

$member = new App\Member; 

次にあなたが列を割り当てることができます。

$member->column = ''; 

またはすべての列が大量アサインされている場合:

$member->fill((array)$results); 

それとも持って私は何かを誤解した?

-3

これを実行するには、確かにEloquentを使用する必要があります。

モデル間のリレーションを宣言し、where条件を使用することがあります。

のような:

Member::where(......)->get(); 

これは雄弁なインスタンスを返します、そして、あなたはあなたが必要とするものは何でもすることができます。

+0

私はそれがdownvoteを持っている理由を得ることはありません。上記とほとんど同じ答えですが、私は雄弁に基づいて喜んでいますが、これは同じ質問に対する2つの可能な答えです。 –

+1

質問には答えません。 OPは** raw **データを返す複雑なSQLクエリを使用する必要があります。問題は、その生データから新しいモデルインスタンスを作成することです。 –

+0

私は答えではない答えを完全にdownvoteしますが、事をする別の(うまくいけば良い)方法の提案。多くの場合、この場合のように、これらの答えは意味をなさないが、よりよい方法は実現可能な方法ではない、またはOP質問に答えない。だからどうして気になる?誇示するだけですか?あなたが答えを知らない場合は、ポイントに固執、答えを控える。 – zontar

関連する問題