Eloquent Model访问方法调用

时间:2016-07-07 18:00:16

标签: orm laravel-5 eloquent

我们有两种模式和方法历史

class Employment_request extends Model {
    protected $table = 'employment_requests';
    // some code here
    public function history(){
        return $this->hasMany('App\Employment_history');
    }
}


class Employment_history extends Model {
     protected $table = 'employment_history';
     // some code
}

让我们创建Employment_request的实例:

$r = Employment_request::find(28)

在这种情况下,在创建Employment_request实例时请求方法历史数据。不是吗? - 对象占用更多内存
- 需要更多时间来创造它 - 创建对象后添加的历史数据

因为当我添加新的历史记录时:

Employment_history::create([
    'user_id' => 17,
    'employment_request_id' => 28,
    'change' => '? Stefanka'
]);

并致电方法:

$r->history;

新的记录不会与集合一起返回,但在重新创建对象之后就是。 但是当我打电话时:

$r->history()->get()

我不需要重新创建它来获取新数据。

它是如何在里面工作的? 在修补控制台中测试。

1 个答案:

答案 0 :(得分:1)

laravel中有三种类型的方法来加载关系数据。渴望加载,延迟加载和懒人渴望加载。急切加载是当您检索父模型数据时必须添加,您必须将关系名称传递给with方法(Employment_request::with('history')->find(28)),然后您可以通过将其作为类变量({{ 1}})。如果使用此方法,则仅在检索父模型数据时在数据库上提供关系记录。如果要在手动添加新关系记录后获取关系,则必须使用从数据库中检索最新数据的延迟加载方法($r->history;)。这就是为什么你无法从方法(急切加载)访问你的新记录。