我已经从Eloquent打开了查询日志,并且非常惊讶ORM在后台正在做什么,特别是在Eager Loading中。
让我解释一下:
class User extends Model{
protected $primaryKey = 'id_user';
public function child(){
return $this->hasOne('Models\Child','id_user');
}
}
然后我在某个地方使用它:
用户::与('子') - >发现(1);
背景中的查询应该是使用 EQUAL(=)运算符的简单 WHERE ,因为关系是hasOne。
但是查看Query Logger,上面的操作返回:
(忘记用户的查询,一个是"对")
{
"query": "select * from `childs` where `childs`.`id_user` in (?)",
"bindings": [
106
],
"time": 0.36
}
Eloquent构建的查询使用运算符 IN 而不是 EQUAL(=),除非它们在MySQL中相同,否则这没有任何意义。< / p>
示例:
{
"query": "select * from `childs` where `childs`.`id_user` = ?",
"bindings": [
106
],
"time": 0.36
}
我的问题是:可以优化此查询吗?这个查询比使用 EQUAL(=)?
慢Eloquent是这样做的,还是我对这段关系做错了什么?