php - 如何连接具有多个属性匹配的表?
问题描述
我正在尝试将我的原始 sql 转换为 laravel 查询构建器,并且在如何使用许多属性匹配来连接多个表时遇到了困难。
在这种情况下,我想用三个属性匹配(book、p_seq 和 staff_code)而不是一个(book)来加入表 jr_h 和 jr_d。原始 sql:
$sql = "select from_time,to_time,t.staff_code,s.name_t as staff_name,t.book,t.p_code,t.p_seq,p.hrs1,s.img_file,
t.hrs_work,p.sharing_cnt as hrs_work, t.hrs_ot as hrs_ot from jr_d as t
inner join jr_h as p on(t.book=p.book and t.p_seq=p.p_seq and t.staff_code=p.staff_code)
inner join astaff as s on(t.staff_code=s.staff_code) ";
Laravel 查询生成器:
$jr_d = DB::table('jr_d')
->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
->join('astaff', 'jr_d.staff_code', '=', 'astaff.staff_code')
->select('jr_h.*','jr_d.*','astaff.*','astaff.name_t as staff_name')
->where('jr_d.ref_group','=','E')
->get();
并且还想知道是否有一种方法可以使查询更快,因为它在表中有很多数据。
解决方案
尝试这个:
// ...
->join('jr_h p', function($join) {
$join->on('t.book', '=', 'p.book');
$join->on('t.p_seq', '=', 'p.p_seq');
// ... more conditions
});
推荐阅读
- php - 如何在 PayPal JavaScript 中传递 PHP 变量作为付款金额
- terraform - 如何在 terraform 中创建单斜杠字符串?
- netsuite - SuiteTalk Netsuite 集成 - 使用 SOAP 还是 REST?
- node.js - 在 nodejs 中使用 ssh 时,simple-ssh 需要从用户那里获取输入
- ios - 没有这样的模块'MapboxCommon_Private'/MapboxSearch/编译器不支持这个SDK
- r - 在列 R 中的组之间应用差异和均值
- reactjs - 在反应导航 tabNavigator 中转到主屏幕
- sql - postgresql 加入 tbale 并在 12 个月前求和
- conv-neural-network - 如何将原始输入图像发送到 CNN 模型的 MLflow 服务端点?
- php - 如何将条带的 price_id 替换为存储在数据库中的已经存在的 price_id