【发布时间】:2017-10-30 09:28:38
【问题描述】:
现在我正在使用这个基本的 sql 查询在三个表中进行连接查询
select `modules`.`id`, `sub_modules`.`id` AS `sub_module_id`, `sub_modules`.`name`
from `module_groups`
inner join `positions` on `positions`.`id` = `module_groups`.`position_id`
inner join `modules` on `modules`.`id` = `module_groups`.`module_id`
inner join `sub_modules` on `sub_modules`.`module_id` = `modules`.`id`
where `positions`.`id` = 1
我想知道使用 laravel eloquent 是否最好
到目前为止我已经尝试过了
$module = new ModuleGroup();
$name = $module
->select('modules.id as modules_id', 'sub_modules.id as sub_modules_id', 'sub_modules.name as sub_module_name')
->join('positions', 'positions.id','=','module_groups.position_id')
->join('modules', 'modules.id','=','module_groups.module_id')
->join('sub_modules', 'sub_modules.module_id','=','modules.id')
->where('positions.id', '=', 1)
->get();
它有效,但我想知道是否有使用 laravel 的最佳方法。
你能给我吗?
【问题讨论】:
-
Laravel 最好的方法是使用 Laravel 关系方式。它更容易,更快。看这里laravel.com/docs/5.4/eloquent-relationships
-
我不是 Laravel 专家,但您当前的尝试似乎完全代表了原始的连接系列。也许更大的问题是您是否在表中设置了索引以使连接快速。
-
@Qazi 关系对于 Laravel 来说是方便且惯用的,但肯定不会更快 - 加载每个关系都需要它自己的查询。在这种特殊情况下,必须进行 4 次查询以获取具有关系的必要组。单一且适当的原始查询会更高效。