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

我正在保存/更新模型并使用刷新()方法来输出新数据。


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."

        }

    }

}


隔江千里
浏览 82回答 1
1回答

慕无忌1623718

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