Php 具有动态约束的拉维尔急负荷

Php 具有动态约束的拉维尔急负荷,php,laravel,closures,anonymous-function,eager-loading,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(arra

有人能帮我理解为什么下面的代码是有效的吗

$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() ;
他说

方法Illumb\View\View::\ toString不能引发异常


事实上,很难说,因为这里没有显示相关代码,但代码的问题是:

$x = $widget->objGallery->galleryItems()->with(array('captions' => 
      function($query){ $query->where('locale', $id );
     }))->get();
变量$id在此未定义。您需要在闭包中添加use to use if,因此代码应如下所示:

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

您应该将您的环境更改为本地,并已启用调试,这样您可能就会知道这个问题。可能在更正我显示的代码时,您不会出现错误。

事实上很难说,因为您没有在此处显示相关代码,但代码的问题是:

$x = $widget->objGallery->galleryItems()->with(array('captions' => 
      function($query){ $query->where('locale', $id );
     }))->get();
变量$id在此未定义。您需要在闭包中添加use to use if,因此代码应如下所示:

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

您应该将您的环境更改为本地,并已启用调试,这样您可能就会知道这个问题。可能在更正我显示的代码时,您不会出现错误。

如果您想通过关系进行查询,您需要使用whereHas


这是,对于渴望加载的概念,只需澄清。。。通过对@Marcin Nabiałek的响应进行语法修复,With函数中的where仅对急切加载数据起作用,而不是在主查询中起作用。

如果要通过关系进行查询,则需要使用WHERHADS

这是,对于渴望加载的概念,只需澄清。。。通过对@Marcin Nabiałek的响应进行语法修复,With函数中的where只对急切加载的数据起作用,而不在主查询中起作用