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

时间:2017-03-05 02:01:00

标签: php sql laravel

我正在使用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排序联合表?

1 个答案:

答案 0 :(得分:3)

使用lists()时,您需要传入您想要值的键的名称。通常,您可以在此处拨打get()而不是lists(),但如果您拨打lists('cs.id'),那么您应该获得匹配的cs.id&#39>的数组。