Как я могу отображать только все данные без повторения с отдельным символом? - PullRequest
1 голос
/ 15 октября 2019

У меня есть запрос, который берет id_user из нескольких транзакций.

Я просто хочу найти id_user в пользовательской таблице, взяв только 1 из каждых данных.

пример: в запросеесть идентификатор пользователя [1,1,3,4]

я просто хочу взять [1,3,4]

, поэтому имя, которое появляется только от id_user [1, 3,4] не [1,1,3,4]

Я пытался использовать уникальные и уникальные функции, но вместо этого данные повторяются несколько раз

это мой код:

$arrayDiff = [];
        $totalMasing = [];
        $listuser = [];

        if ($totalSubmitted == 1) {
            for ($i = 0; $i < $totalSubmitted; $i++) {
                $item = $subset[$i]['id_okr'];
                $arrayDiff[] = Okr::find($item)->get();
                $totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])
                    ->where('status', '=', '2')
                    ->where('id_user', '=', $interact)
                    ->count();

                $listuser[] = User::find($arrayDiff[0][$i]['id_created']);
            }
        }else{
            for ($i = 1; $i < $totalSubmitted; $i++) {
                $item = $subset[$i]['id_okr'];
                $arrayDiff[] = Okr::find($item)->get();
                $totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])
                    ->where('status', '=', '2')
                    ->where('id_user', '=', $interact)
                    ->count();

                $listuser[] = User::find($arrayDiff[0][$i]['id_created']->distinct('id_created'));

            }

это мой JSON Результат:

listuser: [
            {},
            {},
            {}
       ]

какие-нибудь советы по моей проблеме? Большое спасибо

1 Ответ

0 голосов
/ 16 октября 2019

Я переписал ваш код с изменениями и комментариями.

$arrayDiff = [];
    $totalMasing = [];
    $listuser = [];
    $listuserids = [];
    if ($totalSubmitted == 1) {
      for ($i = 0; $i < $totalSubmitted; $i++) {
        $item = $subset[$i]['id_okr'];
        $arrayDiff[] = Okr::find($item)->get();
        $totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])->where('status', '=', '2')->where('id_user', '=', $interact)->count();
        $listuserids[] = $arrayDiff[0][$i]['id_created']; // add this line
        //$listuser[] = User::find($arrayDiff[0][$i]['id_created']); // remove this line
      }
    } else {
      for ($i = 1; $i < $totalSubmitted; $i++) {
        $item = $subset[$i]['id_okr'];
        $arrayDiff[] = Okr::find($item)->get();
        $totalMasing[] = Interact::where('id_created', '=', $arrayDiff[0][$i]['id_created'])->where('status', '=', '2')->where('id_user', '=', $interact)->count();
        $listuserids[] = $arrayDiff[0][$i]['id_created']; // add this line
        //$listuser[] = User::find($arrayDiff[0][$i]['id_created'])->distinct('id_created')); // remove this line
      }
    }
    // and place query outside of loop!
    $listuser[] = User::whereIn('id', $listuserids)->get();

Это решение решит вашу проблему и вернет вам только уникальный результат. & это также улучшит производительность вашего кода.

(Важное примечание: старайтесь не помещать запрос в цикл.)

...