Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:模型关系vs ORM_Php_Laravel_Laravel 5 - Fatal编程技术网

Php Laravel:模型关系vs ORM

Php Laravel:模型关系vs ORM,php,laravel,laravel-5,Php,Laravel,Laravel 5,我正在从事一个项目,该项目大量使用ORM而不是控制器中的模型关系来获取数据(例如:使用LeftJoin而不是使用hasMany等建立适当的模型关系,然后通过该关系进行检索) 我的问题实际上是关于表演。使用模型关系访问数据是否比使用LeftJoin更快?我不确定拉威尔是否真的在引擎盖下进行了左连接 我的日程排得很紧,所以我想决定是否真的值得尝试重构代码以使用模型关系,以及它是否能够提高性能 提前感谢连接和关系不是对立的。关系是为了易于开发、更干净、更可读的代码、易于维护。除非您正在开发某种数据挖掘

我正在从事一个项目,该项目大量使用ORM而不是控制器中的模型关系来获取数据(例如:使用LeftJoin而不是使用hasMany等建立适当的模型关系,然后通过该关系进行检索)

我的问题实际上是关于表演。使用模型关系访问数据是否比使用LeftJoin更快?我不确定拉威尔是否真的在引擎盖下进行了左连接

我的日程排得很紧,所以我想决定是否真的值得尝试重构代码以使用模型关系,以及它是否能够提高性能


提前感谢

连接和关系不是对立的。关系是为了易于开发、更干净、更可读的代码、易于维护。除非您正在开发某种数据挖掘程序,否则性能差异几乎不存在

已编辑
如果您关注的是性能,则可以高效地实现缓存。

连接和关系并不是对立的。关系是为了易于开发、更干净、更可读的代码、易于维护。除非您正在开发某种数据挖掘程序,否则性能差异几乎不存在

已编辑
如果您关注的是性能,则可以高效地实现缓存。

Laravel anbd Eloquent可能会使用关系而不是联接来执行不同的查询。可以使用barryvdh/laravel调试栏查看查询执行情况

我的观察是,如果可能的话,Laravel倾向于使用两个查询而不是一个连接。它将执行第一个查询,然后使用从该查询返回的ID在“joined”表上执行第二个查询,作为“where myID in(1,2,3,4,5..”,然后将结果缝合在一起


正如其他人所建议的那样,建立一个快速测试,看看什么在您的环境中最有效是最好的选择。我更喜欢尽可能多地使用关系,因为您可以轻松地阅读代码所做的工作。

Laravel anbd Elowent可能会使用关系而不是联接来执行不同的查询。可以使用barryvdh/laravel调试栏查看查询执行情况

我的观察是,如果可能的话,Laravel倾向于使用两个查询而不是一个连接。它将执行第一个查询,然后使用从该查询返回的ID在“joined”表上执行第二个查询,作为“where myID in(1,2,3,4,5..”,然后将结果缝合在一起


正如其他人所建议的那样,建立一个快速测试,看看什么在您的环境中最有效是最好的选择。我更喜欢尽可能多地使用关系,因为您可以轻松阅读代码所做的工作。

我们很难为您回答这样的问题,尤其是在您时间紧迫的情况下。Laravel(至少)有时不使用连接。但是,我建议您构建一个简单的测试用例,并在您的设置中运行它。正如shoieb0101的回答所示-Laravel的关系不执行联接,它们执行额外的查询以获取相关(子)组件。有时关系有意义,有时连接有意义。关系很好,因为您将连接的数据放在一个很好的foreachable数组中,其中连接只会将另一个表中的一些数据添加到查询结果中。我们很难为您回答这样的问题,尤其是如果您时间紧迫的话。Laravel(至少)有时不使用连接。但是,我建议您构建一个简单的测试用例,并在您的设置中运行它。正如shoieb0101的回答所示-Laravel的关系不执行联接,它们执行额外的查询以获取相关(子)组件。有时关系有意义,有时连接有意义。关系是好的,因为您在一个好的foreachable数组中拥有连接的数据,其中连接只会将另一个表中的一些数据添加到查询结果中。感谢各位的精彩见解!我将一些模型更改为关系,并将其加载到我的Datagrid包中以显示内容。根据我的测试,Laravel似乎没有使用连接。它获取父ID,然后执行IN查询以检索相关的模型数据。它看起来确实有性能提升(目前还不能确认),这也意味着代码更易于维护。谢谢大家的精彩见解!我将一些模型更改为关系,并将其加载到我的Datagrid包中以显示内容。根据我的测试,Laravel似乎没有使用连接。它获取父ID,然后执行IN查询来检索相关的模型数据。它似乎有性能提升(目前还不能确认),这也意味着代码更易于维护