Laravel find模型方法返回错误的结果

时间:2016-08-24 13:48:41

标签: php laravel-5.1

此代码

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

返回此查询

select * from `fees_applies`

为什么忽略id?

表中的主键是可以的。 我写的时候

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

它运作正常

3 个答案:

答案 0 :(得分:2)

使用Model::where('id', $value)语法时,where方法将返回Illuminate\Database\Eloquent\Builder类型的对象。使用语法Model::find($value)时,find方法将返回Eloquent模型的实例。模型本身可以用于查询数据库,但是当尝试将Eloquent实例直接转换为SQL而不添加任何其他条件(或使用返回Builder对象的方法)时,实例将默认选择所有记录而不任何条件。以下脚本可能有助于了解您的情况实际发生的情况:

// $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());

要求模型实例再次查询数据库是一个全新的查询,而不是建立'在您之前用于实际检索实例的那个。

答案 1 :(得分:0)

它返回错误的结果,还是sql查询错误? 要查看运行的查询,请尝试

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

答案 2 :(得分:0)

确保您正确使用了 find()。当您的代码仍在运行时,很容易不小心使用 first() 导致错误的结果。我们只是将 where() 重新分解为 find(),这导致了问题:

Model::find(1)->first();

这可能看起来有效,但您实际得到的是表格中的第一行!