尝试多次检索相同的ID。当前,即使有多个请求使用相同的ID,该请求也只检索一次数据。
/**
* Display the specified resource.
*
* @param \App\Page $page
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$page = Page::find($id);
$blocks = $page->content; // eg. 1,2,1,1,1
$blocks = Block::whereIn('id', explode(',', $blocks))->get();
// $blocks = Block::findMany(explode(',', $blocks));
dd($blocks); //returns 1 & 2, not 1,2,1,1,1
return view('pages.show', compact('blocks'));
}
基本上尝试多次获取相同的资源。 我的看法很简单:
@foreach($blocks as $block)
{{$block->title}}
@endforeach
我尝试了findmany和whereIn,但是没有运气。
答案 0 :(得分:1)
由于您想多次重复相同的块,因此不能仅通过查询来执行。数据库将简单地返回这些块,而不会重复。
您可以自己映射块的ID,以创建包含所需重复块的列表:
$ids = explode(',', Page::find($id)->content);
$dictionary = Block::findMany($ids)->keyBy('id');
$blocks = array_map(function ($id) use ($dictionary) {
return $dictionary[$id];
}, $ids);
return view('pages.show', compact('blocks'));
答案 1 :(得分:0)
你可以试试这个吗?
public function show($id)
{
$page = Page::find($id);
$blocks = $page->content; // eg. 1,2,1,1,1
$blocks = Block::whereIn('id', array_unique(explode(',', $blocks)))->get();
dd($blocks); //returns 1 & 2, not 1,2,1,1,1
return view('pages.show', compact('blocks'));
}