为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 7 Eloquent:模型上的方法刷新()忽略默认(嵌套)急切加载

Laravel 7 Eloquent:模型上的方法刷新()忽略默认(嵌套)急切加载

PHP
隔江千里 2023-09-22 14:50:33
我正在保存/更新模型并使用刷新()方法来输出新数据。Laravel 文档说:如果您计划在使用 save 或 saveMany 方法后访问关系,您可能希望使用刷新方法重新加载模型及其关系控制器  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();  }模型在漫画模型中,我定义了默认的急切加载:  protected $with = ['series', 'series.publisher'];这非常适合简单的 GET 方法。但如果我保存模型并对其使用刷新() ,输出就会失去其关系。store() 和 update() 方法的行为也不同。store ()方法没有给我任何关系。update ()方法仅返回系列关系(但不返回嵌套关系)。这是一个错误还是我在文档中遗漏了某些内容?谢谢。示例数据{"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."        }    }}
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这实际上是预期的refresh工作方式。refresh仅重新加载已加载的关系。在第一个示例中,没有加载任何关系,因为该模型不是从数据库中检索的,它是您直接创建的全新模型实例。第二个示例很可能是路由模型绑定,其中模型已从数据库返回,并且因为您正在使用它protected $with,所以它已加载这些关系,因此它会重新加载这些关系。



查看完整回答
反对 回复 2023-09-22
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信