2016-08-24 36 views
1

這個代碼Laravel發現模型方法返回一個錯誤的結果

FeesApplies::find(2)->toSql(); 

回報這個查詢

select * from `fees_applies` 

爲什麼它忽略ID?

表中的主鍵是可以的。 當我寫

FeesApplies::where('id',2); 

它工作正常

+0

'FeesApplies :: find(2)'實際返回錯誤的結果嗎?你對'toSql'在這種特殊情況下的工作原理有誤解,所以我試圖弄清楚是否存在真正的問題或只是混淆。 – ceejayoz

+0

如果它*會給你錯誤的結果,請打印出'FeesApplies :: find(2) - > toJson()',看看有什麼被抓取。 – ceejayoz

+0

我試圖理解爲什麼find(id)返回錯誤的結果(當我在我的模型中添加「_use DB; _」時,它工作正常) –

回答

0

是它返回錯誤的結果,或者是SQL查詢錯了嗎? 要查看查詢跑去嘗試

DB::enableQueryLog(); 
FeesApplies::find(2); 
dd(DB::getQueryLog()); 
+0

它回調錯誤的結果(表中的第一行) –

+1

find()返回帶有這個id的記錄,如果你缺少一個id爲1的記錄,這可能是第一條記錄。 –

+0

我有這個ID記錄,但它仍然返回錯誤的結果。但是當我添加「使用數據庫」時在我的模型中,它的正確性。謝謝您的回答 –

2

當使用Model::where('id', $value)語法中,where方法將返回Illuminate\Database\Eloquent\Builder類型的對象。當使用語法Model::find($value)時,find方法將返回一個Eloquent模型的實例。模型本身可以用來查詢數據庫,但是當試圖直接將Eloquent實例轉換爲SQL而不添加任何其他條件(或使用返回對象的方法)時,實例將默認選擇沒有任何條件的所有記錄。下面的腳本可以幫助流下了一點光對什麼是真正打算在您的情況:

// $fees1 will be an instance of Illuminate\Database\Eloquent\Model 
$fees1 = FeesApplies::find(2); 

// Asking the model instance to convert itself to SQL without any conditions 
var_dump($fees1->toSql()); 

// Asking the model instance to retrieve a Builder object with a single condition 
var_dump($fees1->where('id', 2)->toSql()); 

問模型實例查詢數據庫,又是一個全新的查詢,而不是「建設」你以前用來實際檢索實例的那個。