laravel - Laravel HasMany 反向关系问题
问题描述
让我们举个例子:
我有一个显示所有发票的页面。
网站管理员可以通过搜索他们的姓名或姓氏来过滤客户的结果。
发票型号
public function clients()
{
return $this->belongsTo('App\Client');
}
客户模型
public function invoices() {
return $this->hasMany('App\Invoice');
}
假设管理员想要按客户过滤发票,他输入例如“Jhon”
我的控制器:
1-选择名称 LIKE 'Jhon' 或姓氏 LIKE 'Jhon' 的客户
2- 如果 $query 返回一个包含很多客户名为 Jhon 的数组。
我将如何使用该关系为该客户获取发票???
解决方案
您可以两种方式都这样做,具体取决于最适合的方式。
发票(哪里有):
Invoice::whereHas('client', function ($query){
$query->where('name', 'like', 'Jhon')
->orWhere('lastname', 'like', 'Jhon');
})->get();
客户(flatMap + invoices 关系):
Client::where('name', 'like', 'Jhon')
->orWhere('lastname', 'like', 'Jhon')
->get()
->flatMap->invoices;
请记住,第二个选项会遭受 N+1 的影响,除非with('invoices')
在执行查询之前调用 (->get());
推荐阅读
- javascript - 跟踪在特定网站上花费的时间:Chrome 扩展
- python-3.x - 你如何将多个圆圈放在一个网格中?
- php - Imagick 使用谷歌字体将 svg 转换为 png
- python - 如何手动填充 Django 模型数据以进行插入
- wordpress - 如何添加永久链接部分以在管理员中编辑自定义帖子类型的帖子页面
- npm - 检查 package.json 的 dependencies 部分中是否有任何范围版本的命令
- assembly - 汇编中的除法溢出(8086)
- html - 如何在 CSS 文件中放置范围、最小值、最大值和值
- hadoop - 如何修复 java.lang.IllegalArgumentException:无法识别的 Hadoop 主要版本号:3.1.0?
- c# - 在 Microsoft Azure App 服务中部署 asp.net webforms 应用程序后出现运行时错误