我正在使用Laravel开发一个应用程序的功能,我遇到了这个奇怪的错误,我无法弄清楚。我有以下代码作为我的控制器的辅助函数,在我添加对以下函数的调用之前,它正常工作:
protected function f($p){
$cIds = $cs->select('cs.id')->get();
$cs = DB::table('cs')
->select('cs.id')
->join('pucs', 'cs.id', '=', 'pucs.c_id')
->where('pucs.p_id', '=', (string)$p->id)
->whereIn('cs.id', $cIds)->lists('cs.id');
return $cs;
}
其中pucs
有一个cs
的外键和一个名为p_id
的列,我只想返回p_id = $p->id
的行。 $p
是上一个查询的结果,$p->id
是一个int(我认为?)。当我在我的网站上打开页面时,出现以下错误:
缺少Illuminate \ Database \ Query \ Builder :: lists()
的参数1
有没有人对可能导致此问题的原因有任何见解?我最初的想法是$p->id
是一个int并且导致了问题,因此我使用(string)
运算符将其转换为字符串,并尝试strval($p->id)
。我没有想法。
更新:使用pluck('cs.id')会出现同样的错误。我认为这个问题可能是(字符串)$ p-> id,但是当我注释掉 - > where('pucs.p_id','=',(string)$ p-> id)我仍然得到同样的问题。作为参考,我在同一个帮助文件中有一个非常相似的代码行:
$bIds = $bs->select('bs.id')->get();
$bs = DB::table('bs')
->whereIn('bs.id', $bIds)->lists('bs.id');
我很确定它之前有效,即使我在前面的代码中遇到错误,但现在它也没有用。
无论如何,我这样做的原因是因为我有这些笨拙的表已经加入并与其他表联合,然后从中选择了cs.id(或bs.id)的子集,我想要只是原始表的结果。另外,我得到了一些奇怪的错误,因为MYSQL显然有问题按ID排序联合表?
答案 0 :(得分:3)
使用lists()
时,您需要传入您想要值的键的名称。通常,您可以在此处拨打get()
而不是lists()
,但如果您拨打lists('cs.id')
,那么您应该获得匹配的cs.id&#39>的数组。