首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel从哪里得到了references()方法?

Laravel从哪里得到了references()方法?
EN

Stack Overflow用户
提问于 2015-12-29 07:55:03
回答 2查看 1.4K关注 0票数 4

我已经被塞了一个小时了,因为我正在试图找出Laravel5.2从哪里得到的引用()方法代码如下所示

代码语言:javascript
复制
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。

有人能向我指出在上面的代码中引用()方法在哪里吗?

任何帮助和建议都是很好的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-29 08:04:36

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

打电话

任何不存在(或无法访问)的方法调用都将传递给__call,后者将设置一个属性(由该方法命名)为您传递的值。

示例

代码语言:javascript
复制
$f = new \Illuminate\Support\Fluent;
$f->something('value')->willBeTrue();

dump($f);
//
Illuminate\Support\Fluent {
  #attributes: array:2 [
    "something" => "value"
    "willBeTrue" => true
  ]
}
票数 6
EN

Stack Overflow用户

发布于 2016-07-25 19:29:15

当我破解Blueprint类并看到它使用Fluent实现了几个契约,其中Arrayable和Jsonable,实际上任何不存在的方法都将被传递给__call方法,它将在属性数组中创建一个新元素,并以键作为方法名:

代码语言:javascript
复制
$this->attributes[$method] = count($parameters) > 0 ? $parameters[0] : true;

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

另一个很好的例子是在这种情况下通常使用的onDelete(‘级联’)之类的触发器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34506861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档