【问题标题】:PHP Laravel Error: Object of class stdClass could not be converted to stringPHP Laravel 错误:stdClass 类的对象无法转换为字符串
【发布时间】:2017-07-25 00:33:39
【问题描述】:

我正在使用 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') 给出相同的错误。我认为问题可能是 (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 排序联合表时存在问题?

【问题讨论】:

  • 我讨厌这么前卫……但是错误信息不是 super 清楚吗?你打电话给->lists(),那个电话是“缺少参数1”。
  • 使用pluck 而不是lists。但也是的,我不明白没有参数就调用列表或采摘
  • 所以我正在重构这里发布的代码,这甚至不是我想要修复的错误哈哈。我更新了问题。
  • f($p){} 见额外的}

标签: php sql laravel


【解决方案1】:

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

【讨论】:

  • 所以我正在重构这里发布的代码,这甚至不是我想要修复的错误哈哈。我更新了问题。
  • 我不确定你对这个问题有什么改变?我仍然看到相同的“缺少参数 1”错误
猜你喜欢
  • 2017-09-21
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 2014-11-21
  • 2021-11-10
  • 2021-05-28
相关资源
最近更新 更多