Laravel没有检索相同的id多次

时间:2019-01-28 16:59:51

标签: php laravel eloquent

尝试多次检索相同的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,但是没有运气。

2 个答案:

答案 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'));
}