2016-11-28 176 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 { 
} 

我不知道如何做到這一點,因爲成員國不具有在其上設置的任何字段,我擔心我不會正確初始化它。什麼是實現這一目標的最佳方式?

+0

你嘗試只做一個會員模式,並從那裏獲取數據? – GabMic

+1

我不確定你的意思。如果你的意思是把where子句和內部連接轉換成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

這很好,但你會得到一個模型的集合。 '極限1'在這裏沒有意義。 – sleepless

+1

當我這樣做時,我不能再選擇關係了......怎麼回事? –

-1

你可以簡單地初始化一個新的模式:

$member = new App\Member; 

然後,你可以指定列:

$member->column = ''; 

或者如果所有列質量分配:

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

;或者我誤解了一些東西?

-3

您應該定義使用Eloquent來執行該操作。

您可能會聲明模型之間的關係,並使用where條件。

,如:

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

這將返回一個雄辯的例子,你可以做任何你需要的。

+0

我不明白爲什麼它有downvote。這與上面的答案几乎是一樣的,但我的口頭是基於雄辯的,對於同一個問題,這是兩個可能的答案。 –

+1

它不回答問題。 OP需要使用返回** raw **數據的複雜SQL查詢。問題是關於從原始數據創建一個新的模型實例。 –

+0

我完全downvote答案不是答案,但建議另一種(希望更好)的方式做一件事。通常,就像在這種情況下,這些答案沒有得到重點,更好的方式不是一種可行的方式,或者不回答OP問題。那爲什麼要麻煩?只是爲了炫耀?堅持這一點,如果你不知道答案,不要回答。 – zontar

相關問題