Сохранить несколько значений флажков в таблице базы данных Laravel - PullRequest
0 голосов
/ 11 февраля 2020

Пока я знаю, что мне нужно хранить значения флажков в массиве следующим образом:

<input name="thinking_traps[]" type="checkbox" value="1">
<input name="thinking_traps[]" type="checkbox" value="2">
<input name="thinking_traps[]" type="checkbox" value="3">

Но я не уверен, как правильно передать эти значения в контроллер и добавить их в таблица миграции? Будет ли каждое значение добавляться как отдельный столбец в базе данных?

Здесь я попытался добавить их, как любой другой ввод:

public function store(Request $request)
    {
        $this->validate($request, [
            'thought_entry' => 'required'
        ]);



        $entry = new ThoughtJournal;
        $entry->user_id = auth()->user()->id;
        $entry['entry_date'] = date('Y-m-d H:i');
        $entry->thought_entry = $request->input('thought_entry');
        $entry->emotions = $request->input('emotions');
        $entry->thinking_traps = $request->input('thinking_traps');
        $entry->balanced_thought = $request->input('balanced_thought')
        $entry->save();

        return redirect('/dashboard');
    }
public function up()
    {
        Schema::create('thoughtjournal', function (Blueprint $table) {
            $table->increments('entry_id');
            $table->integer('user_id');
            $table->date('entry_date');
            $table->mediumText('thought_entry');
            $table->
            $table->timestamps();
        });
    }

Ответы [ 3 ]

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

Я не вижу этого thinking_traps в вашем файле миграции таблицы

Модель

class ThoughtJournal{

   // Add it's type to casts as array
   public $casts = ['thinking_traps'=> 'array'];

   // Add it to fillables if you haven't
   public $fillable = ['thinking_traps',...];

   //...
}

Хранение

Во-вторых, в вашем метод хранения, когда ни один элемент не выбран в флажке, вам нужно установить его в виде массива, например

   ...
   $entry->thinking_traps     = $request->has('thinking_traps') 
                              ? $request->get('thinking_traps') 
                              : [];

И в качестве меры предосторожности для проверки вы можете использовать его следующим образом:

$this->validate($request, [
   'thinking_traps' => 'nullable|in:1,2,3' // your values
]);

Миграции

А для миграции я не вижу, чтобы там был установлен столбец, вы можете изменить файл миграции следующим образом:

// You can have it as json
$table->json('thinking_traps')->nullable();

// or string
$table->string('thinking_traps')->nullable();

Или вы можете создать отдельный файл миграции, если вы не хотите воссоздавать таблицу в shell / cmd через artisan, например, так:

php artisan make:migration add_thinking_traps_to_thoughtjournal_table --table=thoughtjournal

Эта команда добавит файл миграции отдельно и добавит этот столбец как как обычно, вы можете php artisan migrate добавить этот столбец.

Дайте нам знать, если это работает.

0 голосов
/ 12 февраля 2020

Значения записи будут массивом, даже если вы установите один флажок.

$inking_traps = $ request-> input ('inking_traps ');

$inking_traps будет массивом. Попробуйте сохранить значения массива в отдельной таблице в виде нескольких строк с внешним ключом

0 голосов
/ 12 февраля 2020

Вы не должны хранить несколько значений в одной строке в вашей базе данных. Вы должны хранить его отдельно, чтобы ваши данные были нормализованы.

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