Laravel with():这个方法有什么作用?

时间:2017-02-21 05:44:49

标签: php laravel-5 eloquent

我是Laravel的新手并且正在开发小型应用程序。在Laravel教程中,我已经阅读了Eloquent模型的 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()方法的概念并解释上述语句的工作原理?在此先感谢。

3 个答案:

答案 0 :(得分:0)

这基本上可以进行6次单独的查询。

它将从2016年的全部抓取开始:

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

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

之后,它会根据这些与Model_5和查询where子句之间定义的关系,对急切加载Model_6Model_1执行2个其他查询。

最后,它将它们合并在一个大的快乐阵列中。

这与写作基本相同:

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

答案 1 :(得分:0)

雄辩模型上的

方法with()使您可以急切地加载。

这意味着,当您对某个模型进行请求时,如果需要此数据,则可以对数据库进行其他请求。雄辩的将用加载的数据填充您的模型。

如果您没有在模型中包含一些相关模型,而是在以后请求它们,则Eloquent会将新请求应用于数据库。

您可以在documentation

中了解有关急切加载的更多信息

答案 2 :(得分:-1)

public void add (Scanner sc) { Contact c = new Contact(name, address, phone, email); System.out.println("Enter a name: "); c.setName(sc.nextLine()); System.out.println("Enter an address: "); c.setAddress(sc.nextLine()); System.out.println("Enter a phone number: "); c.setPhone(sc.nextLine()); System.out.println("Enter an email: "); c.setEmail(sc.nextLine()); entries = Arrays.copyOf(entries, entries.length + 1); } 方法用于此方法中指定的某个模型。

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

很快,它可以让您使用模型的方法。