此代码
FeesApplies::find(2)->toSql();
返回此查询
select * from `fees_applies`
为什么忽略id?
表中的主键是可以的。 我写的时候
FeesApplies::where('id',2);
它运作正常
答案 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();
这可能看起来有效,但您实际得到的是表格中的第一行!