我是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()方法的概念并解释上述语句的工作原理?在此先感谢。
答案 0 :(得分:0)
这基本上可以进行6次单独的查询。
它将从2016年的全部抓取开始:
select * from [Model_1_table] where `year` = 2016;
然后,它将执行一个新查询,该查询受查询结果以及Model_1
和Model_2
之间的关系约束,然后它将对Model_3
和{Model_4
执行相同的操作{1}},与获取的Model_2
相关。
之后,它会根据这些与Model_5
和查询where子句之间定义的关系,对急切加载Model_6
和Model_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()
。
很快,它可以让您使用模型的方法。