【问题标题】:Laravel with(): What this method does?Laravel with():这个方法是做什么的?
【发布时间】:2026-02-13 12:10:01
【问题描述】:

我是 Laravel 的新手,正在开发小型应用程序。在 Laravel 教程中,我已经阅读了 Eloquent 模型的 with() 方法,但无法理解它的工作原理。

我看过很多教程来清除这个概念。有人发表对 with() 方法的理解,有人发表对 with() 方法的深刻理解。在某个地方有人试图清除以下示例:

$collection = Model_1::where("year", 2016)->with(array("Model_2"=>function($q){$q->with("Model_3","Model_4");}))->with("Model_5","Model_6")->get()->toArray();  

总的来说,我仍然无法理解这种方法的概念。请任何人都可以清除 with() 方法的概念并解释上述语句的工作原理?提前致谢。

【问题讨论】:

标签: php laravel-5 eloquent


【解决方案1】:

Eloquent 模型上的方法 with() 可以让您快速加载。

这意味着,当您对某个模型进行请求时,如果您需要这些数据,您可以对数据库进行其他请求。 Eloquent 会用加载的数据填充你的模型。

如果你没有在你的模型中包含一些相关的模型并在之后请求它们,Eloquent 会将新的请求应用到 DB。

您可以在documentation 中阅读更多关于急切加载的信息

【讨论】:

    【解决方案2】:

    这基本上做了 6 个单独的查询。

    将从 2016 年的 fetch all 开始:

    select * from [Model_1_table] where `year` = 2016;
    

    然后,它将执行一个新的查询,该查询受查询结果以及Model_1Model_2 之间的关系约束,然后它将对Model_3Model_4 执行相同的操作,与获取的Model_2's。

    之后,它将执行另外 2 个查询以根据 Model_5Model_6Model_1 之间定义的关系以及查询 where 子句进行预加载。

    最后将它们合并到一个快乐的大数组中。


    这与写作基本相同:

    $array = Model_1::where("year", 2016)
        ->with('Model_2.Model_3', 'Model_2.Model_4', 'Model_5', 'Model_6')
        ->get()
        ->toArray();
    

    【讨论】:

      【解决方案3】:

      这个with()方法是从这个方法内部指定的某个模型中使用的。

      例如,如果您有名为“Country”的模型和名为“city”的方法,您可以在控制器中或任何您想要的地方写入 Country::with('city')

      简而言之,它使您可以使用模型的方法。

      【讨论】:

      • 完全错了,所有方法都会在您的模型上启用,但是使用with() 方法相关的模型将预先加载预先加载