【问题标题】:Laravel not retrieving same id mulptiple times EloquentLaravel 没有多次检索相同的 id Eloquent
【发布时间】:2019-01-29 02:08:33
【问题描述】:

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

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    由于您想多次重复同一块,您不能只使用查询来执行此操作。 DB 将简单地返回这些块而不会重复。

    您可以自己映射块的 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
    • 这工作非常感谢!我的数组中有奇怪的值,所以不得不使用 array_filter 和 str_replace 来排序.. 完美地工作你的钻石!
    【解决方案2】:

    你能试试这个吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 2020-12-04
      • 2013-09-17
      • 1970-01-01
      • 2019-08-17
      • 2020-01-06
      • 1970-01-01
      相关资源
      最近更新 更多