Laravel не получает один и тот же идентификатор несколько раз. Eloquent - PullRequest
0 голосов
/ 28 января 2019

Попытка получить один и тот же идентификатор несколько раз.В настоящее время запрос извлекает данные только один раз, даже если существует несколько запросов на один и тот же идентификатор.

/**
 * 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

Я пытался найти много и где, но не повезло.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Можете ли вы попробовать это.

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'));
}
0 голосов
/ 28 января 2019

Поскольку вы хотите повторить один и тот же блок несколько раз, вы не можете просто сделать это с помощью запроса.БД просто вернет эти блоки без дублирования.

Вы можете самостоятельно сопоставить идентификаторы блоков, чтобы создать список с нужными дублированными блоками:

$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'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...