雄辩的 whereIn 错误:1390 准备好的语句包含太多占位符 laravel 5.7

Eloquent whereIn error:1390 Prepared statement contains too many placeholders laravel 5.7

提问人:Yandra Adie 提问时间:11/30/2018 最后编辑:Yandra Adie 更新时间:11/30/2018 访问量:5383

问:

我有一个简单的查询,如下所示:

$arp_terhadap_st_reg = Sfs::select('msisdn')->wherebetween('created', [$datefrom, $dateto])->where('cluster',$cluster)->pluck('msisdn');

$arp_outlet_reg = Arps::whereIn('msisdn',$arp_terhadap_st_reg)->count();

在这里,$idList是一个数组,其中包含用户 ID,我有超过 60000 个 id。

每次,代码都会告诉我:

"error":{"type":"Exception","message":"SQLSTATE[HY000]: General error: 1390 Prepared statement contains too many placeholders

SQL:选择 count(*) 作为聚合,从 where in (?, ?, ?, ?,...................arpsmsisdn

很多 ?...

那么,我该如何解决这个问题。谢谢。

PHP 拉维尔

评论

0赞 Leena Patel 11/30/2018
问题的精确副本:laravel.io/forum/... ???如何??
0赞 Yandra Adie 11/30/2018
不适合我
0赞 Leena Patel 11/30/2018
这是你的真实代码?否则发布真实代码
0赞 Roman Meyer 11/30/2018
似乎您陷入了 MySQL/MariaDB 占位符限制。大约是 65k。 尝试通过拆分$idsList来分隔查询
0赞 Leena Patel 11/30/2018
@YandraAdie看到我的答案。

答:

3赞 Leena Patel 11/30/2018 #1

如下用法array_chunk

$arp_terhadap_st_reg = Sfs::select('msisdn')->wherebetween('created', [$datefrom, $dateto])->where('cluster',$cluster)->get()->toArray();

$arp_outlet_count = 0;

foreach (array_chunk($arp_terhadap_st_reg, 1000) as $arp_terhadap_st) {
    $arp_outlet_reg = Arps::whereIn('msisdn',$arp_terhadap_st)->count();
    $arp_outlet_count = $arp_outlet_count + $arp_outlet_reg;
}

您将获得您的总数$arp_outlet_count

评论

0赞 Jaber Al Nahian 12/10/2020
whereNotIn呢?