conversationDesc部分有2条数据,但blade部分只返回一条数据,为什么?
There are 2 data in the conversationDesc section, but only one data is returned in the blade section, why?
conversationDesc部分有2条数据,但blade部分只返回一条数据;为什么?这里同样的数据返回了两次;为什么?消息:“abcdefgh”来了两次,但我想看到消息:“1abcde”和消息:“abcdefgh”。
MyController.php
public function index(Request $request, $conversation_id)
{
$c2cmessages = C2CMessage::where('conversation_id', $conversation_id)->get();
foreach ($c2cmessages as $c2cmessage) {
$MessageContent = $c2cmessage["MsgBody"][0]["MsgContent"];
$decodedData = json_decode($MessageContent["Data"], true);
$conversationDesc = $decodedData["conversationDesc"];
}
return view('admin.c2cmessages.index',
compact('c2cmessages', 'conversationDesc'));
}
dump($conversationDesc);
这两个数据正在返回“1abcde”和“abcdefgh”。
index.blade.php
<ul class="contacts-block profile-box list-unstyled">
@foreach($c2cmessages as $c2cmessage)
<li class="contacts-block__contact-container">
<div class="contacts-block__contact-content">
<div class="contacts-block__contact-content__time">
<b>Message:</b>
<span class="contacts-block__contact-content__time__text">
{{$conversationDesc}}
</span>
</div>
</div>
</li>
@endforeach
</ul>
在你的循环中,你每次都会覆盖 $conversationDesc
的值,所以它只会有最后一个值。
由于您将 $c2cmessages
数组传递到视图中,因此没有理由传递单独的 $conversationDesc
值。
控制器中需要循环的唯一原因是解析和转换 JSON 对象。因为 Eloquent get()
函数 returns 是一个 Collection
对象,你可以像这样使用 map()
方法以获得更清晰的代码:
public function index(Request $request, $conversation_id)
{
$c2cmessages = C2CMessage::where('conversation_id', $conversation_id)
->get()
->map(function ($c2cmessage) {
$messageContent = $c2cmessage["MsgBody"][0]["MsgContent"];
$decodedData = json_decode($messageContent["Data"], true);
return [
'conversationDesc' => $decodedData["conversationDesc"],
// add any other fields you need here too
];
});
return view('admin.c2cmessages.index', compact('c2cmessages'));
}
您的视图应如下所示:
<ul class="contacts-block profile-box list-unstyled">
@foreach($c2cmessages as $c2cmessage)
<li class="contacts-block__contact-container">
<div class="contacts-block__contact-content">
<div class="contacts-block__contact-content__time">
<b>Message:</b>
<span class="contacts-block__contact-content__time__text">
{{$c2cmessage['conversationDesc']}}
</span>
</div>
</div>
</li>
@endforeach
</ul>
编辑问题前的旧答案
dd()
表示 dump()
和 die()
- 首先打印值,然后终止脚本执行。
如果要查看多个值以进行调试,请使用 dump()
。
conversationDesc部分有2条数据,但blade部分只返回一条数据;为什么?这里同样的数据返回了两次;为什么?消息:“abcdefgh”来了两次,但我想看到消息:“1abcde”和消息:“abcdefgh”。
MyController.php
public function index(Request $request, $conversation_id)
{
$c2cmessages = C2CMessage::where('conversation_id', $conversation_id)->get();
foreach ($c2cmessages as $c2cmessage) {
$MessageContent = $c2cmessage["MsgBody"][0]["MsgContent"];
$decodedData = json_decode($MessageContent["Data"], true);
$conversationDesc = $decodedData["conversationDesc"];
}
return view('admin.c2cmessages.index',
compact('c2cmessages', 'conversationDesc'));
}
dump($conversationDesc);
这两个数据正在返回“1abcde”和“abcdefgh”。
index.blade.php
<ul class="contacts-block profile-box list-unstyled">
@foreach($c2cmessages as $c2cmessage)
<li class="contacts-block__contact-container">
<div class="contacts-block__contact-content">
<div class="contacts-block__contact-content__time">
<b>Message:</b>
<span class="contacts-block__contact-content__time__text">
{{$conversationDesc}}
</span>
</div>
</div>
</li>
@endforeach
</ul>
在你的循环中,你每次都会覆盖 $conversationDesc
的值,所以它只会有最后一个值。
由于您将 $c2cmessages
数组传递到视图中,因此没有理由传递单独的 $conversationDesc
值。
控制器中需要循环的唯一原因是解析和转换 JSON 对象。因为 Eloquent get()
函数 returns 是一个 Collection
对象,你可以像这样使用 map()
方法以获得更清晰的代码:
public function index(Request $request, $conversation_id)
{
$c2cmessages = C2CMessage::where('conversation_id', $conversation_id)
->get()
->map(function ($c2cmessage) {
$messageContent = $c2cmessage["MsgBody"][0]["MsgContent"];
$decodedData = json_decode($messageContent["Data"], true);
return [
'conversationDesc' => $decodedData["conversationDesc"],
// add any other fields you need here too
];
});
return view('admin.c2cmessages.index', compact('c2cmessages'));
}
您的视图应如下所示:
<ul class="contacts-block profile-box list-unstyled">
@foreach($c2cmessages as $c2cmessage)
<li class="contacts-block__contact-container">
<div class="contacts-block__contact-content">
<div class="contacts-block__contact-content__time">
<b>Message:</b>
<span class="contacts-block__contact-content__time__text">
{{$c2cmessage['conversationDesc']}}
</span>
</div>
</div>
</li>
@endforeach
</ul>
编辑问题前的旧答案
dd()
表示 dump()
和 die()
- 首先打印值,然后终止脚本执行。
如果要查看多个值以进行调试,请使用 dump()
。