Laravel 7 Eloquent:模型上的方法 refresh() 忽略默认(嵌套)预加载
Laravel 7 Eloquent: Method refresh() on a model ignores default (nested) eager loading
我是saving/updating一个模型,使用refresh()方法输出新数据
Laravel 文档说:
If you plan on accessing the relationship after using the save or saveMany methods, you may wish to use the refresh method to reload the model and its relationships
控制器
public function store()
{
//
$comic = new Comic;
$comic->fill($this->validateComic());
$comic->save();
return $comic->refresh();
}
public function update(Comic $comic)
{
//
$comic->fill($this->validateComic());
$comic->save();
return $comic->refresh();
}
型号
在 Comic 模型中,我定义了默认的预加载:
protected $with = ['series', 'series.publisher'];
这非常适合简单的 GET 方法。但是,如果我保存模型并在其上使用 refresh(),输出将失去其关系。
存储 () 和更新 () 方法的行为也不同。 store()-方法没有给我任何关系。 update()-方法returns 仅系列关系(但不是嵌套关系)。
这是一个错误还是我在文档中遗漏了什么?
谢谢。
示例数据
{
"comic_id":21,
"series_id":5,
"comic_issue":"2",
"comic_name":"Test after 6",
"status_id":1,
"comic_rating":null,
"comic_release_date":"2015-09-26",
"comic_read_date":null,
"comic_summary":"Summary 5",
"created_at":"2020-08-07T17:28:14.000000Z",
"updated_at":"2020-08-08T17:14:16.000000Z",
"series":
{
"series_id":5,
"series_name":"Assumenda consectetur.",
"publisher_id":4,
"release_date":null,
"publisher":
{
"publisher_id":4,
"publisher_name":"Aliquam earum."
}
}
}
这实际上是 refresh
工作方式的预期。 refresh
仅重新加载已加载的关系。在第一个示例中,没有加载任何关系,因为该模型不是从数据库中检索的,它是您直接创建的全新模型实例。第二个示例很可能是路由模型绑定,其中模型已从数据库返回,并且因为您正在使用 protected $with
它加载了这些关系,所以它重新加载了这些关系。
我是saving/updating一个模型,使用refresh()方法输出新数据
Laravel 文档说:
If you plan on accessing the relationship after using the save or saveMany methods, you may wish to use the refresh method to reload the model and its relationships
控制器
public function store()
{
//
$comic = new Comic;
$comic->fill($this->validateComic());
$comic->save();
return $comic->refresh();
}
public function update(Comic $comic)
{
//
$comic->fill($this->validateComic());
$comic->save();
return $comic->refresh();
}
型号
在 Comic 模型中,我定义了默认的预加载:
protected $with = ['series', 'series.publisher'];
这非常适合简单的 GET 方法。但是,如果我保存模型并在其上使用 refresh(),输出将失去其关系。
存储 () 和更新 () 方法的行为也不同。 store()-方法没有给我任何关系。 update()-方法returns 仅系列关系(但不是嵌套关系)。
这是一个错误还是我在文档中遗漏了什么?
谢谢。
示例数据
{
"comic_id":21,
"series_id":5,
"comic_issue":"2",
"comic_name":"Test after 6",
"status_id":1,
"comic_rating":null,
"comic_release_date":"2015-09-26",
"comic_read_date":null,
"comic_summary":"Summary 5",
"created_at":"2020-08-07T17:28:14.000000Z",
"updated_at":"2020-08-08T17:14:16.000000Z",
"series":
{
"series_id":5,
"series_name":"Assumenda consectetur.",
"publisher_id":4,
"release_date":null,
"publisher":
{
"publisher_id":4,
"publisher_name":"Aliquam earum."
}
}
}
这实际上是 refresh
工作方式的预期。 refresh
仅重新加载已加载的关系。在第一个示例中,没有加载任何关系,因为该模型不是从数据库中检索的,它是您直接创建的全新模型实例。第二个示例很可能是路由模型绑定,其中模型已从数据库返回,并且因为您正在使用 protected $with
它加载了这些关系,所以它重新加载了这些关系。