Как разбить массив и сохранить только указанное значение c в базу данных? Laravel с Ajax - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть вопрос. Мне нужно сохранить массив в базу данных, но сначала нужно разделить его и сохранить только указанное значение c. Я использую Ajax и передаю данные контроллеру.

ps: набор массивов может быть больше 1, поэтому каждый набор необходимо разделить и сохранить на основе столбцов внутри БД.

my javascript, которые содержат Ajax:

Hotspot.prototype.saveData = function (data) {
        if (!data.length) {
            return;
        }

        // Get previous data
        var raw_data = localStorage.getItem(this.config.LS_Variable);

        var hotspots = [];

        if (raw_data) {
            hotspots = JSON.parse(raw_data);
        }
    
        // Append to previous data
        $.each(data, function (index, node) {
            hotspots.push(node);
        });
        console.log(hotspots);

        // var field=JSON.stringify(hotspots).split(',');
        this.data=data;
        $.ajax({
            type:"POST",
            url:"/store",
            dataType:'json',
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            data:{
                Title: JSON.stringify(hotspots),
                Message: JSON.stringify(hotspots),
                x: JSON.stringify(hotspots), 
                y: JSON.stringify(hotspots),
            },
            success: function(data){

                console.log(data,d);
            },
            error: function(data)
            {
                console.log(data);
            },
            
        });

        localStorage.setItem(this.config.LS_Variable, JSON.stringify(hotspots));

        this.element.trigger('afterSave.hotspot', [null, hotspots]);
    };

Контроллер:

public function storePin(Request $request)
    {
       request()->validate([
           'Title' => 'required',
            'Message'  => 'required',
            'x'=> 'required',
            'y'=>'required',
       ]);

           dd($request);
             if ($request->all())
             {
                 $pin = new Pin();
                 $pin->Title=json_encode($request->input('Title'));
                 $pin->Message= json_encode($request->input('Message'));
                 $pin->x = json_encode($request->input('x'));
                 $pin->y =json_encode($request->input('y'));

                 $pin->save();
                //  return response()->json_encode($request);

             }

    }

пример вывода:

Title: [{"x":58.333333333333336,"y":90.54545454545455,"Title":"hi","Message":"hi"}]
Message: [{"x":58.333333333333336,"y":90.54545454545455,"Title":"hi","Message":"hi"}]
x: [{"x":58.333333333333336,"y":90.54545454545455,"Title":"hi","Message":"hi"}]
y: [{"x":58.333333333333336,"y":90.54545454545455,"Title":"hi","Message":"hi"}]

на основе этого я хочу, чтобы он только сохранял:

Title:only save title
Message:save message
x:save x
y save y

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Просто передайте весь массив горячих точек, например:

data: hotspots,

Затем в вашей модели выполните любое форматирование и вставьте множество:

// some formatting to create data array
$data = [];
foreach($hotspots as $hotspot){
    $data[] = [
        'Title' => $hotspot['Title'],
        'Message'  => $hotspot['Message'],
        'x' => $hotspot['x'],
        'y' => $hotspot['y'],
    ];
}

Pin::insert($data);
0 голосов
/ 21 февраля 2020

Кажется, проблема в разборе от data до hotspots. Этот метод выполняет итерацию для каждой записи data, затем присваивает полный узел.

$.each(data, function(index, node) {
  hotspots.push(node);
});

В каждом определении свойства используется полный объект hotspots, а не одно свойство.

data: {
  Title: JSON.stringify(hotspots),
  Message: JSON.stringify(hotspots),
  x: JSON.stringify(hotspots),
  y: JSON.stringify(hotspots),
},

Возможно, вам нужно сделать что-то вроде этого:

{
  Title: hotspots[0].Title,
  Message: hotspots[0].Message,
  x: hotspots[0].x,
  y: hotspots[0].y,
}

Даже в этом решении отсутствует важная информация. Например, hotspots должен быть массивом hotspot объектов ... как узнать, какой из них вы собираетесь отправить для одного запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...