我已经被塞了一个小时了,因为我正在试图找出Laravel5.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');
});我似乎找不到references()方法,无论是\Illuminate\Database\Schema\Blueprint还是照明\Support\Fluent。
有人能向我指出在上面的代码中引用()方法在哪里吗?
任何帮助和建议都是很好的
发布于 2015-12-29 08:04:36
看起来它是由Fluent通过__call魔术方法处理的。
任何不存在(或无法访问)的方法调用都将传递给__call,后者将设置一个属性(由该方法命名)为您传递的值。
示例
$f = new \Illuminate\Support\Fluent;
$f->something('value')->willBeTrue();
dump($f);
//
Illuminate\Support\Fluent {
#attributes: array:2 [
"something" => "value"
"willBeTrue" => true
]
}发布于 2016-07-25 19:29:15
当我破解Blueprint类并看到它使用Fluent实现了几个契约,其中Arrayable和Jsonable,实际上任何不存在的方法都将被传递给__call方法,它将在属性数组中创建一个新元素,并以键作为方法名:
$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;但是,我仍然要扩展这个问题:在数据库记录上创建外键约束时,它究竟在哪里使用该属性?我知道深入研究不会有什么用处,但我发现自己非常好奇Schema构建器除了捕获这些方法之外是如何工作的。
另一个很好的例子是在这种情况下通常使用的onDelete(‘级联’)之类的触发器。
https://stackoverflow.com/questions/34506861
复制相似问题