Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 从雄辩的模型实例调用查询生成器方法_Php_Performance_Laravel_Laravel 5_Orm - Fatal编程技术网

Php 从雄辩的模型实例调用查询生成器方法

Php 从雄辩的模型实例调用查询生成器方法,php,performance,laravel,laravel-5,orm,Php,Performance,Laravel,Laravel 5,Orm,我对拉雷维尔和一般的活跃唱片都很陌生。如果这是一个愚蠢的问题,我提前道歉。但我想确定我的想法是否正确 背景: laravel文档在雄辩的ORM部分中说: 因为雄辩的模型是查询构建器,所以您应该检查所有 方法在查询生成器上可用。你可以用其中任何一种 方法在您雄辩的查询中 有人多次提到,当处理非常大的数据时,有说服力的查询不是很好,通常最好使用基本查询生成器 我想知道这句话: 您可以在雄辩的查询中使用这些方法中的任何一种 我读过的许多例子将两者分开(例如 通常比 model::all() MODE

我对拉雷维尔和一般的活跃唱片都很陌生。如果这是一个愚蠢的问题,我提前道歉。但我想确定我的想法是否正确

背景:

laravel文档在雄辩的ORM部分中说:

因为雄辩的模型是查询构建器,所以您应该检查所有 方法在查询生成器上可用。你可以用其中任何一种 方法在您雄辩的查询中

有人多次提到,当处理非常大的数据时,有说服力的查询不是很好,通常最好使用基本查询生成器

我想知道这句话:

您可以在雄辩的查询中使用这些方法中的任何一种

我读过的许多例子将两者分开(例如

通常比

model::all()
MODEL::all();
)在比较性能时

我计划用Laravel创建我的新项目,并考虑使用这两种功能(处理复杂和大型数据的基本查询生成器方法,然后使用特定的雄辩方法处理任何其他数据)

我的问题:

我正在考虑如何使我的代码可读、干净、合理高效。我可能要处理大数据(例如,两个数据库上的数千到数百万行和20到30个表)。可以安全地说:

DB::table('table')->get();
同:

MODEL::get();
假设两者都只返回一个集合,在大数据中通常比

model::all()
MODEL::all();

??谢谢。

重要的是要查看每个报表返回值的差异。虽然两者都将返回一个集合,但集合中的项目才是关键

DB::table('table')->get()
返回stdClass对象的集合,无需Laravel进行额外处理。如果您使用的是SoftDeletes,这将忽略该功能。它还将返回行中的所有字段

MODEL::get()
这将返回模型的集合。Laravel将把每个结果加载到模型的一个新实例中。软删除等特性以及隐藏[]和可见[]等属性将得到尊重


取决于你将如何处理这些数据,这可能是决定因素。如果您在响应中返回它,您可能会希望使用模型方法,以便特性和属性得到尊重。如果您正在处理返回用于其他用途的数据,那么DB方法可能是最好的。

查看每个语句返回的差异非常重要。虽然两者都将返回一个集合,但集合中的项目才是关键

DB::table('table')->get()
返回stdClass对象的集合,无需Laravel进行额外处理。如果您使用的是SoftDeletes,这将忽略该功能。它还将返回行中的所有字段

MODEL::get()
这将返回模型的集合。Laravel将把每个结果加载到模型的一个新实例中。软删除等特性以及隐藏[]和可见[]等属性将得到尊重


取决于你将如何处理这些数据,这可能是决定因素。如果您在响应中返回它,您可能会希望使用模型方法,以便特性和属性得到尊重。如果您正在处理返回用于其他用途的数据,那么DB方法可能是最好的。

一般来说,Model适合编写整洁的查询。您可以使用模型之间的关系,这样代码就会更小。但是使用查询生成器,您需要大量的联接、选择和where子句来建立表之间的简单关系。您真的需要同时从数千行获取数据吗?我感觉速度可以忽略不计,因为大多数时间都只是查询数据库,与简单的stdClass对象相比,模型可能会有内存开销,但因为它们提供了额外的功能。一般来说,模型很适合编写整洁的查询。您可以使用模型之间的关系,这样代码就会更小。但是使用查询生成器,您需要大量的联接、选择和where子句来建立表之间的简单关系。您真的需要同时从数千行获取数据吗?我感觉速度可以忽略不计,因为大多数时间都只是查询数据库,与简单的stdClass对象相比,模型可能会有内存开销,但这是因为它们提供了额外的功能。