Laravel Eager Load具有动态约束

时间:2014-10-24 06:10:13

标签: php laravel closures anonymous-function eager-loading

任何人都可以帮助我理解以下代码的工作原理

$x = $widget->objGallery->galleryItems()->with(array('captions' => function($query){ $query->where('locale', 'IT' );}))->get() ;

但当我使用动态值时

$id='11';
$x = $widget->objGallery->galleryItems()->with(array('captions' => function($query){ $query->where('locale', $id );}))->get() ;

正在说

  

方法Illuminate \ View \ View :: __ toString()不得抛出异常

2 个答案:

答案 0 :(得分:9)

事实上很难说因为你没有在这里展示相关代码,但代码存在问题:

$x = $widget->objGallery->galleryItems()->with(array('captions' => 
      function($query){ $query->where('locale', $id );
     }))->get();

这里变量$id未定义。如果处于闭包状态,则需要添加use以使用,因此代码应如下所示:

$x = $widget->objGallery->galleryItems()->with(array('captions' => 
      function($query) use($id) { $query->where('locale', $id );
     }))->get();

您应该将您的环境更改为本地并打开调试,可能您会知道此问题。可能正如我所展示的那样纠正这段代码时你不会有错误。

答案 1 :(得分:0)

你不能,如果你想通过关系查询,你需要使用whereHas。

对于急切加载的概念,这只是澄清...在@MarcinNabiałek的响应中使用语法修复,“with”函数中的哪个位置仅适用于急切加载数据,而不适用于主查询。 / p>