在Laravel 5.1中无法将Illuminate \ Database \ Eloquent \ Builder类的对象转换为字符串

Paw*_*gol 3 php laravel

我正在谷歌搜索并尝试表单nxt两天,它尝试对其进行调试,因此从表中获取数据ID的代码是:

$term=category::get(['id']);
Run Code Online (Sandbox Code Playgroud)

使用该$ varibale按id作为外键从数据库获取数据,其代码如下:-

$categories = HelpCenter::whereHas('category', function($category) use ($term)
{
    $category->where('category_id','=',$category);
})
  ->take(5)->get();
Run Code Online (Sandbox Code Playgroud)

Tho*_*Kim 5

这行代码没有意义:

$category->where('category_id','=',$category);
Run Code Online (Sandbox Code Playgroud)

$category 是一个Eloquent Builder实例,因此您有效执行的操作是:

EloquentBuilder->where('category_id', '=', EloquentBuilder);
Run Code Online (Sandbox Code Playgroud)

我假设第二个$category变量是$term这样的:

$category->where('category_id','=',$term);
Run Code Online (Sandbox Code Playgroud)

但这仍然会引起一些问题,我将在后面进行解释。不过,首先,我认为您应该重命名变量,以使其更直观。而不是$category命名,$query这样就不会混淆。

$categories = HelpCenter::whereHas('category', function($query) use ($term)
{
    $query->where('category_id', '=', $term);
})
->take(5)->get();
Run Code Online (Sandbox Code Playgroud)

接下来,我们需要解决更多问题。

  1. 在您的示例中,$term从未使用过该变量。我假设它应该是类别ID的数组。
  2. 我还假设这$term是您想要传递给该where方法的内容。

为了解决#1问题,您目前正在获得类别实例的集合。实际上,您可以获得数据库中的每个类别。我不确定这是否是您的意图,但是无论哪种方式,您可能仍然想要一个类别ID数组。如@smartrahat所建议,请使用该pluck方法。

$term = category::get(['id'])->pluck('id');
Run Code Online (Sandbox Code Playgroud)

为了解决#2,您想找到与您传递的ID相匹配的所有类别。您可以使用该whereIn方法。

$query->whereIn('category_id', $term);
Run Code Online (Sandbox Code Playgroud)

总之,它应该看起来像这样:

$term=category::get(['id'])->pluck('id');

$categories = HelpCenter::whereHas('category', function($query) use ($term)
{
    $query->whereIn('category_id', $term);
})
->take(5)->get();
Run Code Online (Sandbox Code Playgroud)