Php 使用foreach迭代模型会产生奇怪的结果-Lumen/Laravel
我想迭代具有以下结构的模型:Php 使用foreach迭代模型会产生奇怪的结果-Lumen/Laravel,php,laravel,eloquent,orm,lumen,Php,Laravel,Eloquent,Orm,Lumen,我想迭代具有以下结构的模型: { "id_coretable": 1, "Internal_key": "UPDATED1", "extensiontable_itc": { "description_itc": "UPDATED1" }, "extensiontable_sysops": { "description_sysops": "UPDATED1" } } 检索时使用以下代码: $join = coretable::with($permitte
{
"id_coretable": 1,
"Internal_key": "UPDATED1",
"extensiontable_itc": {
"description_itc": "UPDATED1"
},
"extensiontable_sysops": {
"description_sysops": "UPDATED1"
}
}
检索时使用以下代码:
$join = coretable::with($permittedTables)->find(1);
其中,$permittedTables
是一个表名数组
现在,当我这样做时:
foreach($join as $el){
log::info($el);
}
我得到以下结果:
[2020-02-06 11:32:36] local.INFO: 1
[2020-02-06 11:32:36] local.INFO: 1
[2020-02-06 11:32:36] local.INFO:
[2020-02-06 11:32:36] local.INFO: 1
为什么呢?根据Laravel文档,迭代一个集合肯定会起作用:
$users = App\User::where('active', 1)->get();
foreach ($users as $user) {
echo $user->name;
}
看
现在,我这里肯定有一个模型,不是收藏品。我用if(…instanceof model)
检查了它。
但是,当我使用->findMany(1)
而不是->find(1)
强制检索集合时,情况并没有真正好转。
在foreach循环上使用集合只会导致foreach循环输出完整结构一次,然后离开循环。如果我现在在嵌套的foreach循环中使用这个对象,那么我会得到与上面相同的结果
这是拉威尔的正常行为吗?
如果是这样的话,有没有任何方法可以迭代一个模型,特别是像这里这样的“2D模型”
底线:
我最终想要实现的是能够“动态”地将新值分配给模型的任何元素,然后将其持久化到数据库中。
如果出于这个目的,我应该用新的数组覆盖模型中嵌套的“数组”,那么就这样吧,告诉我怎么做
应该更新模型的输入将具有与模型完全相同的结构和索引。
你也可以在我的另一个问题中了解这一点:
我目前正试图一点一点地解决这个问题,因为上面这个问题还没有得到任何答案。我想到的第一件事是尝试迭代模型并逐个元素更新它。但正如您所看到的,我在这方面也遇到了问题。^^您想迭代一个模型,或者通过()传递给它的关系吗?如果是第一个,那么您需要重新阅读关于find方法的文档,该方法在您提供的链接中只有一个参数。在参数中传递1意味着它将返回一个主键为1的单一模型实例。@DanielProtopov好吧,我想迭代您在我的OP中看到的完整模型。这是从coretable获取的结果,extensiontables通过FK引用该coretable,并使用coretable::with($arrayOfTablenames)与这些表连接. 除了ID为“1”的coretable中的记录之外,引用该记录的extensiontables中的记录也存在于该模型中。我想通过在这个模型上迭代来更新它们。