2016-11-24 47 views
3

我一直在使用laravel一段时间,我只是好奇哪些更好的性能。以这种情况下,我有两个表部门表和单元表具有以下结构性能明智:哪个更好Laravel数据库

Department表

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型号我有UnithasManyunit模型我有belongsTo

现在我的问题是,如果我想在一个部门中的所有单元,其方法是办法一个方法有两个

方法之间最好的部门ONE

$department = Department::find($id); 
$units = $department->unit; 

方法有两个

$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(); 

哪种方法更快更好。

谢谢。

回答

1

APPROACH ONE远。

如果确实存在差异更快,我们将讨论微观优化,对于这些情况,我们将采用更清晰和最易于理解的方式,即第一种。

此外,我想推荐其他改进:

一个部门有很多单位,这样的关系,名字应该是units,不unit

$units = $department->units;

时,你也可以使用隐式绑定。

public function yourMethod (Department $department) 
{ 
    $units = $department->units; 
    return view('your-view', compact('units')); 
} 

UPDATE

我复制我的项目的例子有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

正如你所看到的,是没有区别的,或者至少是微不足道的。所以,具有相同的性能,你应该采取第一种方法,因为更好的质量代码。

+0

但你不觉得这种方法会使两个数据库调用 –

+0

@GhostWorker答案更新,检查它。两种方法的通话次数相同:1. –

+0

您的努力非常值得赞赏 –