使用模型中定义的关系方法进行Laravel原始查询

时间:2015-04-03 10:25:40

标签: laravel eloquent laravel-5

我创建了一个执行原始查询的功能(用于搜索表单)。这将返回查询结果,如return \DB::Select(\DB::Raw("SELECT ..."))。保存此方法的模型也包含关系函数。我们假设此模型具有关系函数products,原始查询的结果存储在$ items中。

当我尝试类似

@foreach($items as $item)
  @foreach($item->products as $product)
    {{ $product->someVar }}
  @endforeach
@endforeach

我得到一个未定义的属性"未定义的属性:stdClass :: products"错误。我认为这是因为Laravel还不知道$ items实际上是Model-class的集合,它与" products"。

有关系。

有没有办法去"绑定"那些关系函数与原始查询?

1 个答案:

答案 0 :(得分:4)

我发现解决方案有点不知不觉在de Model-class中查看。有方法hydrate(和hydrateRaw)。文档告诉我们以下内容:

  

"从普通数组创建模型集合。"

如果有人想知道,这就是解决上述问题的方法:

return self::hydrate(
  \DB::Select(
    \DB::Raw("SELECT * FROM `table`")
  )
);