我们有两种模式和方法历史:
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()
我不需要重新创建它来获取新数据。
它是如何在里面工作的? 在修补控制台中测试。
答案 0 :(得分:1)
laravel中有三种类型的方法来加载关系数据。渴望加载,延迟加载和懒人渴望加载。急切加载是当您检索父模型数据时必须添加,您必须将关系名称传递给with
方法(Employment_request::with('history')->find(28)
),然后您可以通过将其作为类变量({{ 1}})。如果使用此方法,则仅在检索父模型数据时在数据库上提供关系记录。如果要在手动添加新关系记录后获取关系,则必须使用从数据库中检索最新数据的延迟加载方法($r->history;
)。这就是为什么你无法从方法(急切加载)访问你的新记录。