"Преобразование массива в строку" errorr Laravel-попытка сохранить массив в базе данных

"Преобразование массива в строку" errorr Laravel-попытка сохранить массив в базе данных

23.04.2018 07:23:11 Просмотров 97 Источник

Извините, я новичок в Laravel и пытаюсь сохранить в базе данных в первый раз. Im пытается сохранить массив в базе данных, но появляется ошибка "преобразование массива в строку". Я попытался изменить строковое значение в файле миграции на другие параметры, но появляется та же ошибка.

Контроллер

    public function store(Request $request)
{   
    Myroutes::create([ //posting to acc table
        'start' => $request->start,
        'end' => $request->end,
        'waypoints' => $request->waypoints
    ]);

    return redirect('/');
}

миграция

 public function up()
{
    Schema::create('myroutes', function (Blueprint $table) {
        $table->increments('myroute_id');
        $table->integer('user_id');
        $table->string('start');
        $table->string('end');
        $table->string('waypoints');
        $table->timestamps();
    });
}

модель

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Myroutes extends Model
{
    protected $fillable = [
        'user_id',
        'start',
        'end',
        'waypoints'
    ];
}

Смотреть

<div id="dynamicInput" class="form-group">
                    <label>Additional Destinations</label>
                    <input type="text" name="waypoints[]" class="form-control" autocomplete="on">
                </div>

Таблица базы данных

база данных-img

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database#comment86987982_49985727
Путевые точки должны быть массивом? любой ваш хранить его в виде строки?.
https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database#comment87096035_49985727
Я думал, что мне нужны " waypoints []", чтобы заставить работать путевые точки google maps, теперь я изменил имя на "waypoints", но только первая путевая точка отправляется в базу данных. (Все выше код по-прежнему тот же)

Ответы - "Преобразование массива в строку" errorr Laravel-попытка сохранить массив в базе данных / "Array to string conversion" errorr Laravel - Trying to save array to database

jiGL

23.04.2018 07:25:38

Ваш Forminput "путевые точки" - это массив! Поэтому вам придется сначала "конвертировать" его, прежде чем вы сможете сделать вставку

Является ответом!
Tim Lewis

23.04.2018 07:29:14

У вас есть ошибка: 'waypoints' => $request->waypointsне будет работать, так как $request->waypointsявляется массивом, и вы не можете сохранить массив в поле VARCHAR(). Если вы implodeвход и преобразуете его в строку, разделенную запятыми, он должен работать нормально:

`'waypoints' => implode(",", $request->waypoints`)

Тем не менее, это обычно считается плохой идеей; рассмотрите возможность использования отношений между Routesи Waypointsточками в качестве отдельных таблиц как для ясности, так и для простоты использования (особенно при извлечении/редактировании.)

https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database/49985827#comment86988303_49985827
Спасибо, это сработало! Не смогу ли я получить путевые точки и вставить их в поле ввода?
https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database/49985827#comment86988356_49985827
Вы можете быть уверены, но это дополнительная логика, чтобы вытащить строку, разделенную запятыми и т. д., В отличие от возможности вызова Route->waypointsи получить хороший массив моделей путевых точек. Есть чтение: laravel.com/docs/5.6/eloquent-relationships ; полезные вещи, чтобы знать, несмотря ни на что.
https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database/49985827#comment86991549_49985827
или сохраните это как поле json в БД и приведите его к массиву
https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database/49985827#comment86991609_49985827
@Indra абсолютно, столбец JSONтоже будет работать, пока его поддерживает СУБД.
https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database/49985827#comment87108128_49985827
@TimLewis проверьте мой новый вопрос о попытке получить его для публикации из базы данных-спасибо! stackoverflow.com/questions/50045184/…
https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database/49985827#comment104043545_49985827
"взрывать" и "взорваться" нужен разделитель, то почему не использовать "сериализация" и "восстановить" для передачи форматирования в PHP?
fico7489

23.04.2018 10:11:01

после отправки формы, попробуйте сделать это :

dd($request->all());

затем вы увидите, что будет сохранено,и увидите, что путевые точки-это массив. Вы не можете сохранить массив в виде строки, вы должны преобразовать его в строку. Переменная является массивом из-за :

name="waypoints[]"

это не будет массив, если вы поставите так :

name="waypoints"
https://stackoverflow.com/questions/49985727/array-to-string-conversion-errorr-laravel-trying-to-save-array-to-database/49988328#comment87095956_49988328
Я был обеспокоен тем, что путевые точки google maps не будут работать без квадратных скобок в названии. Я удалил его, и он все еще работает, но теперь только первая путевая точка отправляется в базу данных, когда я изменил ее обратно на "путевые точки" = > $request->>waypoints>> .
H45H

29.11.2018 01:55:42

protected $casts = [
        'theme_setting' => 'array'
];

Просто используйте кастинг в модели внутри класса

user12382096

16.11.2019 10:48:59

Я использовал это для laravel 5.8

$array = $request->names;
$array = implode(',', $array);
$request['names'] = $array;
$distribute = User::create($request->all());
Закрыть X