Laravel从哪里获得reference()方法?

时间:2015-12-29 07:55:04

标签: php laravel laravel-5 laravel-5.1 laravel-5.2

我现在已经被困了一个小时了,因为我试图找出Laravel 5.2在哪里获得引用()方法代码如下所示

Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('user_id');
        $table->string('title');
        $table->text('body');
        $table->text('excerpt')->nullable();
        $table->timestamps();
        $table->timestamp('published_at');

        $table->foreign('user_id')->references('id')->on('users');
});

我似乎无法在\ Illuminate \ Database \ Schema \ Blueprint或Illuminate \ Support \ Fluent中找到references()方法。

有人能指出我在上面的代码中可以找到references()方法吗?

任何帮助和提示都会很棒

2 个答案:

答案 0 :(得分:6)

看起来它是由Fluent通过entityManager魔术方法处理的。

Laravel API - Fluent @__call

任何不存在(或不可访问)的方法调用都将传递给Sessionunwrap会将方法命名的属性设置为您传递的值。

实施例

__call

答案 1 :(得分:2)

当我破解打开Blueprint类并且看到它正在使用Fluent实现几个合同(其中包含Arrayable和Jsonable)时,我发现了与lagbox相同的东西,并且实际上任何非现有方法都将传递给__call方法并且它将使用键作为方法名称在attributes数组中创建一个新元素:

$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;

但我仍然会扩展这个问题:在数据库记录上创建外键约束时,它在哪里真正利用了该属性?我知道深入研究并不是真的有用,但我发现自己对Schema构建器如何工作而不是捕获这些方法感到非常好奇。

另一个很好的提及是像onDelete('cascade')这样的触发器,通常在这种情况下使用。