Laravel Model,Builder和Collection之间的区别

时间:2017-10-09 22:53:34

标签: php laravel

我在Laravel doc上看到了这段代码

// Retrieve a model by its primary key...
$flight = App\Flight::find(1);

// Retrieve the first model matching the query constraints...
$flight = App\Flight::where('active', 1)->first();

where和find是构建器函数,为什么App \ Flight作为Model可以调用这些函数。 Laravel中Model,Builder和Collection之间有什么区别?

1 个答案:

答案 0 :(得分:3)

您可以在Eloquent模型上调用Builder个函数,因为Model类使用了魔术__call方法。

正如您在下面的方法定义中所看到的,如果该方法不存在于该类中,或者它不是incrementdecrement,那么新的{{1创建查询,调用该方法。

Builder

https://github.com/illuminate/database/blob/master/Eloquent/Model.php#L1439

至于public function __call($method, $parameters) { if (in_array($method, ['increment', 'decrement'])) { return $this->$method(...$parameters); } try { return $this->newQuery()->$method(...$parameters); } catch (BadMethodCallException $e) { throw new BadMethodCallException( sprintf('Call to undefined method %s::%s()', get_class($this), $method) ); } } ModelBuilder之间的差异:

Collection:这遵循模式本质上是数据库行的实例的模式,允许您创建,更新和删除单行。

Model:这是应用程序和数据库之间的抽象层。通常,它用于为您提供通用API,以构建与平台无关的数据库查询。例如。他们将在MySQL,Postgres,SQL Server等上工作。

Builder:这基本上是类固醇的Collection。它为标准array类型的PHP函数提供了可链接的API,以及用于处理数据集合的其他有用函数。