PHP Laravel错误:类stdClass的对象无法转换为字符串

PHP Laravel错误:类stdClass的对象无法转换为字符串,php,sql,laravel,Php,Sql,Laravel,我正在使用Laravel为一个应用程序开发一个功能,我遇到了一个我无法理解的奇怪错误。我将以下代码作为控制器的助手函数,在我添加对以下函数的调用之前,该函数运行良好: protected function f($p){ $cIds = $cs->select('cs.id')->get(); $cs = DB::table('cs') ->select('cs.id') ->join('pucs', 'c

我正在使用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\u id
的列,我只想返回
p\u id=$p->id
的行
$p
是前一个查询的结果,
$p->id
是一个int(我想是吧?)。当我在我的网站上打开页面时,出现以下错误:

Illumb\Database\Query\Builder::lists()缺少参数1

有没有人知道是什么导致了这个问题?我最初的想法是
$p->id
是一个int,这导致了问题,所以我使用
(string)
操作符将其转换为字符串,并尝试
strval($p->id)
。我没有主意了

更新:使用pull('cs.id')会产生相同的错误。我原以为问题可能是(string)$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对联合表进行排序时遇到了问题?

当使用
lists()
时,您需要输入要为其提供值的键的名称。通常你会在这里调用
get()
,而不是
lists()
,但如果你调用
lists('cs.id')
,那么你应该得到一个匹配的cs.id的数组。

我讨厌这样向前。。。但是错误信息不是非常清楚吗?您调用了
->lists()
,而该调用是“缺少参数1”。请使用
pull
而不是
lists
。但也是的,我不明白在没有争论的情况下调用列表或删除的意义,所以我正在重构代码以发布在这里,这甚至不是我想要修复的错误哈哈。我更新了这个问题。
f($p){}
请参阅额外的
}
,因此我正在重构代码以发布在这里,而这甚至不是我想要修复的错误哈哈。我更新了问题。我不确定你对问题做了什么改变?我仍然看到相同的“缺少参数1”错误