目前,我正在测试的用户只有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',
    ...

    );


我的项目中没有任何关系,我手动执行所有查询,而这是我的错误屏幕截图:

php - Laravel 4的whereIn()在找到第一个值之后是否停止获取行?-LMLPHP

该查询仅获取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/

10-12 15:35