我已经用了一段时间了,我只是好奇哪一个更适合表演。在这个场景中,我有两个表一个是department表,一个是unit表,结构如下
部门表
Field Type Null Key
---------- ---------------- ------- ------
id int(10) unsigned NO PRIMARY
name varchar(255) NO
单位表
Field Type Null Key
------------- ---------------- ------ ------
id int(10) unsigned (NULL) PRIMARY
unit varchar(255) (NULL)
department_id int(10) unsigned (NULL) FOREIGN
created_at timestamp (NULL)
updated_at timestamp (NULL)
在
Department
模型中,我有Unit
和hasMany
模型中,我有unit
的科室。现在我的问题是,如果我想让一个部门的所有部门都知道哪种方法在方法一和方法二之间是最好的
接近1
$department = Department::find($id);
$units = $department->unit;
接近2
$units = DB::table('units AS a')
->select(array('a.id AS id','department_id', 'unit'))
->join('departments AS b', 'a.department_id', '=', 'b.id')
->where('b.id', '=', $id)
->get();
哪种方法更快更好。
谢谢。
最佳答案
一个一个接近。
如果真的存在一个更快的差异,我们将讨论微观优化,对于这些情况,我们将采取更清洁和最容易理解的方式,所以第一种。
此外,我还想推荐其他改进:
一个部门有多个单位,所以关系名称应该是units
,而不是unit
。$units = $department->units;
尽可能使用隐式绑定。
public function yourMethod (Department $department)
{
$units = $department->units;
return view('your-view', compact('units'));
}
更新
我用Laravel Debugbar在我的项目中复制了一个示例,下面是每个查询5次执行的结果:
方法一:
320μs
310μs
300μs
320μs
320μs
~314μs
方法二:
310μs
330μs
360μs
300μs
310μs
约322μs
如你所见,没有区别,或者至少是微不足道的。因此,拥有相同的性能,您应该采用第一种方法,因为这是质量更好的代码。