Как добавить в декодированный массив Json из выбранных значений базы данных - PullRequest
2 голосов
/ 12 июня 2019

Я работаю над фильмом WebApp.Пользователь выбирает фильмы и он добавляется в базу данных.столбец movie_list является JSON, потому что

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

Проблема в том, что вместо добавления его в существующий массив он когда-нибудь перезапишет массив, просто добавит вложенный массив или просто создаст пользовательский ключ (0,1,2,3).

Я пытался функционировать как

  array_merge and array_add

  // It does overwrite it
  array['checkedMovie'] = 3

Тоже задумывался о каждом, но, к сожалению, не знаю, как это реализовать.

Мой мозг зажат.

public function update(Request $request, TrackMovie $trackMovie)
    {

      $currentCheckedMoviesArray = DB::table('track_movies')->where('user_id', $trackMovie->user_id)->get('checkedMovie');


      $currentCheckedMoviesArray = json_decode($currentCheckedMoviesArray, true)[0];

      $newarraychecked=array_add($currentCheckedMoviesArray,$currentCheckedMoviesArray['checkedMovie'], $trackMovie->checkedMovie);



      return dd($newarraychecked);

      $current_length = DB::table('track_movies')->where('user_id', $trackMovie>user_id)->value('lengthOfMovie');
      DB::table('track_movies')->where('user_id', $trackMovie->user_id)->update([
        'lengthOfMovie' => $current_length + $trackMovie->lengthOfMovie,
'checkedMovie' => $newarraychecked;
      ]);
        return dd(TrackMovie::all());
    }

Чтобы сделать это немного чётчеЯ отредактировал это, потому что я думаю, это из-за моего форматирования.

$currentCheckedMoviesArray = json_decode($currentCheckedMoviesArray, true)[0];
// DD Result
array:1 [▼
  "checkedMovie" => "["1", "2"]"
]

$trackMovie->checkedMovie
//DD Result
array:2 [▼
  0 => "2"
  1 => "4"
]

$newarraychecked=Arr::collapse($currentCheckedMoviesArray, $trackMovie->checkedMovie);
//DD Result
    []

Фактический результат:

This is the result what I get on the above code
array:1 [▼
  "checkedMovie" => "["1", "2"]"
]

There some more because I tested many things

array:1 [▼
  "checkedMovie" => "["1", "2"]"
   1             => "2"
   2             => "4"

]

Ожидаемый результат:

The User is checking some movies.
// He already has some movies
checkedMovie = ["1","2","3"]

Now the Application Checks if it already existed the movie in the Database. 
If it does not contain in the database I want to add it. User selects Movie ID (5,6)
checkedMovie = ["1","2","3","5","6"]

After that, it will overwrite the Database column value

Если я что-то забылЧтобы добавить к вопросу, пожалуйста, прокомментируйте его, чтобы я мог отредактировать вопрос!

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Попробуйте со следующим:

$checkedMovie=array(1,2,3);  
$selectedMovie=array(3,4,5,6);
$checkedMovie=array_unique(array_merge($checkedMovie,$selectedMovie));
0 голосов
/ 12 июня 2019

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

Пример:

public function update(Request $request, TrackMovie $trackMovie)
    {
      //Get Current Array from DB
      $currentCheckedMoviesArray = DB::table('track_movies')->where('user_id', $trackMovie->user_id)->get('checkedMovie');
      $currentCheckedMoviesArray = json_decode($currentCheckedMoviesArray, true)[0];

      //Decode JSON array
      $currentCheckedMoviesArray['checkedMovie'] = json_decode($currentCheckedMoviesArray['checkedMovie'])

      //Push the new Movie to the array
      $currentCheckedMoviesArray['checkedMovie'][] = $trackMovie->checkedMovie;

      //Remove duplicates from the array
      $newarraychecked = array_unique($currentCheckedMoviesArray['checkedMovie']);

      ....
    }

...