【问题标题】:Looping and changing value of nested Eloquent relationship嵌套 Eloquent 关系的循环和改变值
【发布时间】:2021-11-26 12:14:15
【问题描述】:

我正在尝试遍历 eloquent 查询返回的数据,并根据用户 ID 向对象添加属性。

但是,当更改嵌套关系 (ticket_flow) 中的值时,会导致两个不同手动工单的ticket_flow 中的价格属性更改为稍后设置的值。

在这种情况下,这会导致价格都设置为 100 美元。谁能帮帮我

 $manual_tickets = ManualTicket::where("user_id", "=", $this->encrypt_decrypt('decrypt', $request->userid)->orderBy('priority')->with('ticket_flow_order.ticket_field_template')

$foreach($manual_tickets $mt){
 if($mt->user_id == 1){
    $mt->ticket_flow->price = $50
}
elseif($mt->user_id == 2){
    $mt->ticket_flow->price = $100
}
}

【问题讨论】:

标签: php laravel eloquent


【解决方案1】:

好吧,好吧,有点乱。

首先,正如 Rafal 所说,您有多个语法错误(缺少括号、分号、“foreach”之前的 $,您的 foreach 循环中没有“as”),这将解释为什么没有任何工作。

其次,您尝试根据 'user_id' 的值加载 $manual_tickets,然后循环遍历每个 $manual_tickets 并查看 user_id 以确定要做什么,但所有 $manual_tickets 的 user_id 将是它们每个都相同,因为您只为一个特定的 user_id 加载它们。所以有点无意义。

最后,正确设置 User、ManualTicket 和 TicketFlow 模型之间的关系,您可以根据“user_id”字段加载 ManualTickets(或者,我在下面没有这样做,加载用户然后访问他们的 ManualTickets通过它们,就容易多了。

不过,这应该能让你走上正轨:

$user_id = $this->encrypt_decrypt('decrypt', $request->userid);
$manual_tickets = ManualTicket::where("user_id", $user_id)->get();
foreach($manual_tickets as $mt){
    if($user_id == 1){
        $mt->ticket_flow->price = "50";
    } elseif($user_id == 2){
        $mt->ticket_flow->price = "100";
    }
}

【讨论】:

  • ... 以$50 为例?那既不是有效变量,也不是数字,也不是字符串,这也是语法错误?
  • 很抱歉,是的 - 有这么多不可避免的事情需要学习,有些人会通过!
  • 现在您从中删除了$。也许OP想要它(我不知道,这没有明确)。
  • 我是故意的。我希望(尽管目前看来不太可能)该值被存储为 INT。
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2016-06-11
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
相关资源
最近更新 更多