我现在已经被困了一个小时了,因为我试图找出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()方法吗?
任何帮助和提示都会很棒
答案 0 :(得分:6)
看起来它是由Fluent通过entityManager
魔术方法处理的。
任何不存在(或不可访问)的方法调用都将传递给Session
,unwrap
会将方法命名的属性设置为您传递的值。
实施例
__call
答案 1 :(得分:2)
当我破解打开Blueprint类并且看到它正在使用Fluent实现几个合同(其中包含Arrayable和Jsonable)时,我发现了与lagbox相同的东西,并且实际上任何非现有方法都将传递给__call方法并且它将使用键作为方法名称在attributes数组中创建一个新元素:
$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;
但我仍然会扩展这个问题:在数据库记录上创建外键约束时,它在哪里真正利用了该属性?我知道深入研究并不是真的有用,但我发现自己对Schema构建器如何工作而不是捕获这些方法感到非常好奇。
另一个很好的提及是像onDelete('cascade')这样的触发器,通常在这种情况下使用。