Laravel 延迟加载的问题

Posted

技术标签:

【中文标题】Laravel 延迟加载的问题【英文标题】:Issue with Laravel Lazy Eager Loading 【发布时间】:2019-04-20 23:48:56 【问题描述】:

我在基于 hasMany 关系从数据库中获取数据并将其发送到 Larave 中的 api 时遇到问题。 在下面的代码中,Laravel 没有给我 Customer id = $id 的 Customer 产品。我不知道为什么,我无法在 $query 旁边发送 $id。如果我在 '' 中写数字,我有很好的答案,但我需要自动接受。

$products = Product::where('name', 'like', '%'.$request->q.'%')->orWhere('symbol', 'like', '%'.$request->q.'%')->with(['customers' => function ($query, $id) 
    $query->where('id', '=', $id);
])->get();

所有api代码

Route::get('/customer/id/products', function(Request $request, $id)
   $customer = Customer::findOrFail($id);
   $products = Product::where('name', 'like', '%'.$request->q.'%')->orWhere('symbol', 'like', '%'.$request->q.'%')->with(['customers' => function ($query, $id) 
       $query->where('id', '=', $id);
   ])->get();

   return $products;
);

提前谢谢你。

【问题讨论】:

【参考方案1】:

如果您想在with 方法中使用变量,您必须在function($query) 之后键入use($id),如下面的代码。

$products = Product::where('name','like','%'.$request->q.'%')
    ->orWhere('symbol', 'like', '%'.$request->q.'%')
    ->with(['customers' => function ($query) use($id) 
         $query->where('id', '=', $id);
    ])->get();

如果您需要查找具有这些客户条件的产品,您可以使用whereHas 函数。查看此post 了解更多信息。

【讨论】:

没什么朋友。只需接受答案,以便其他人可以看到结果。谢谢 好的,我是新手,不知道accept,对不起。

以上是关于Laravel 延迟加载的问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 延迟加载的问题

Laravel 从 vue 文件中混合延迟加载组件

Laravel Service Provider 开发时设置延迟加载时遇到的问题

延迟加载的 vue-router 组件不适用于 s-s-r

延迟加载模块中的角度延迟加载模块

解决hibernate中的懒加载(延迟加载)问题