Model::create () 方法从哪里来的 ?
Model 类源码
namespace Illuminate\Database\Eloquent;
abstract class Model implements Arrayable, ArrayAccess, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable
{
// 省略 (●'◡'●)
}
通过 artisan make:model User 创建一个模型 ,创建的文件内容如下
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
// 省略 ...
public function demo()
{
// 使用 create() 方法插入一条新记录
$this->create([
'username' => 'test',
'password' => '******'
]);
}
}
可以看到创建的模型默认是继承 Illuminate\Database\Eloquent\Model ,然后可以通过 create() 方法来插入记录
但是打开 Model 类的源码看了一下 ,里面并没有 create() 及 update() 这些方法的实现 ,那这些方法是哪里来的呢 ?大概是我面向对象学的太渣了 ,实在想不出来 ~
没找到的方法一般都走php的魔术方法,一步一步找就会发现
先走下面的
__callStatic
方法,进行实例化model
调用其动态方法。动态方法未找到就调用__call
方法,根据逻辑走调用了newQuery()
方法,返回了\Illuminate\Database\Eloquent\Builder
类,最后调用了这个类的
create
方法