目前,我正在测试的用户只有2个;我的User
模型不允许对使用first()
的查询调用whereIn()
方法。
我想知道是否使用用户ID的数组变量在大用户表上调用whereIn()
方法将在找到值之后继续比较值?
我的代码:
$users = User::whereIn('id',$table_of_ids)->remember(2)->get();
使用
first()
方法时出现如下错误:$users = User::whereIn('id',$table_of_ids)->remember(2)->first();
我不确定它的功能是什么,我的第二个问题是:是否有一种等效于以某种方式组合
whereIn()
和remember()
和first()
的方法?更新
我的用户模型:
`protected $ table ='用户';
protected $hidden = array('password', 'remember_token');
protected $fillable = array(
'field1','field2',...);
public static $rules = array(
'field1'=>'required|email|max:254|unique:users',
'field2'=>'required|alpha_num|max:35|unique:users',
...
);
我的项目中没有任何关系,我手动执行所有查询,而这是我的错误屏幕截图:
该查询仅获取ID,我想知道首先要雄辩地生成什么sql查询,以查看whereIn的get()方法是否已优化。
最佳答案
我已经找到了使用take()
方法的明显解决方案,该方法将对查询添加一个限制,这样,mysql将在具有通常来说几乎彼此靠近的第n行之后停止搜索,这实际上是针对查询进行了优化的在大桌子上。
$users = User::whereIn('id',$allusers)->take(count($allusers))->remember(2)->get();
我不能使用first(),因为它提供了一些用雄辩的收集方法无法获取的东西,例如“ Filter()”
关于php - Laravel 4的whereIn()在找到第一个值之后是否停止获取行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33539377/