php artisan tinker
如果我输入$owner = new carfreak\Models\CarTitle();
修补程序正在实例化我的laravel模型,对吧?
但是如果我输入$vehicle = carfreak\Models\Car::first();
,那么修补匠会告诉我Illuminate\Database\QueryException with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'carfreak.Cars' doesn't exist (SQL: select * from 'Cars' limit 1)
....好像它直接与数据库交谈 - 没有涉及模型。 ?!?!?!?
(顺便说一下,我现在还没有汽车或汽车模型)
我错过了什么?
答案 0 :(得分:2)
对于你的两个问题,它不仅仅是一个修补的东西,而是在路线或控制器内表现相同,所以它更多的是Laravel行为,而不是特定的修补程序。
对于你的第一个问题,是的,思想家只会实例化你的模型类并将其返回。
然后,调用Model::method
,如果模型本身不存在method
,即。像first
laravel将创建Illuminate\Database\Eloquent\Builder
的实例并在该查询构建器对象上调用该方法。
因此它变为Illuminate\Database\Eloquent\Builder->first()
,返回$this->take(1)->get($columns)->first();
。这是对列的正常select
查询,然后对模型进行水合并返回它。
因此,在后台首先进行选择查询,然后返回模型,这样您的表就需要存在。