所以我有一个包含所有消息的消息表。我希望固定消息在顶部和正常之后跟随。我能够在查询中使用orderBy()
方法正常执行此操作。
但是,我想为所有固定消息显示一些特定消息。我想在固定消息的顶部有一个标题,在正常消息的顶部有一个标题,让用户知道固定消息和普通消息都在那里。
示例:
我的查询:
$rows = Messages::where('active', true)->orderBy('pinned', 'desc')->get();
我的观点
@foreach ($rows as $row)
{{ $row->message }}
@endforeach
我所看到的
Message text 3
Message text 1
Message text 2
我有一些消息"固定"在数据库的列中。所以我希望固定的那些显示在顶部的描述。像这样:
Pinned
----------
Message text 3
----------
Normal
----------
Message text 1
Message text 2
我已经尝试了orderBy()
并且它的工作非常好,从订购到正常,但是我不能让它显示"固定&#34 ; "正常"信息。我怎么能这样做?
答案 0 :(得分:1)
尝试这样的事情(将1/0
更改为true/false
或您使用的任何内容):
在控制器中:
$pinned = $rows->where('pinned', 1);
$normal = $rows->where('pinned', 0);
在视图中:
@if(count($pinned) > 0)
Pinned
@foreach ($pinned as $row)
{{ $row->message }}
@endforeach
@endif
@if(count($normal) > 0)
Normal
@foreach ($normal as $row)
{{ $row->message }}
@endforeach
@endif
如果真实@foreach
部分很大,请使用partial and @each
代替@foreach
以避免代码重复。
<强>替代强>
@foreach ($rows as $row)
@if ($row->pinned === 1 && !isset($pinnedShown))
Pinned
{{ $pinnedShown = true }}
@endif
@if ($row->pinned === 0 && !isset($normalShown))
Normal
{{ $normalShown = true }}
@endif
{{ $row->message }}
@endforeach
简短替代
不太可读,但如果您只需要短代码,请使用以下内容:
@foreach ($rows as $row)
<?php !($row->pinned == 1 && !isset($pin)) ? : $pin = call_user_func(function(){ echo 'Pinned'; return 1; });
!($row->pinned == 0 && !isset($nor)) ? : $nor = call_user_func(function(){ echo 'Normal'; return 1; }); ?>
{{ $row->message }}
@endforeach