Как я могу сохранить несколько значений флажка в разных строках в базе данных SQL по Laravel? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть форма, подобная изображенной ниже:
1 У меня есть множественное значение с set_name (Numbers 1 2 3 ...) и set_value (0 OR 1).
Thisмоя таблица базы данных:
2

Например, если я проверил номер 1, номер 2 и номер 6, а затем нажал кнопку сохранения.
Сначала проверьте, есть ли значение симя, которое я проверил, в set_name в базе данных или нет, если есть значение (set_name) , обновите set_value этого значения до 1 в противном случае, если нет 't любой set_name и любая строка с этим именем, создайте строку с именами Number 1, Number 2 и Number 6, а затем установите их set_value равным 1
Как я могу выполнить эту работу с laravel?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Предполагая следующий HTML:

<label>
    <input type="hidden" name="name[]" value="Number 1" />
    <input type="checkbox" name="value[Number 1]" value="1" />
    Number 1
</label>

Вы можете использовать метод firstOrCreate:

$values = Request::get('value');
foreach(Request::get('name') as $name) {
    // PHP 7+
    $newValue = $values[$name] ?? 0;
    // PHP <7
    //$newValue = isset($values[$name]) ? 1 : 0;
    Settings::firstOrCreate(['set_name' => $name], ['set_value' => $newValue]);
}

С Документы :

Метод firstOrCreate попытается найти запись в базе данных, используя заданные пары столбец / значение. Если модель не может быть найдена в базе данных, будет вставлена ​​запись с атрибутами из первого параметра, а также с атрибутами во втором необязательном параметре.

0 голосов
/ 04 апреля 2019

Прежде всего вам необходимо изменить дизайн таблицы, задав первичный ключ или уникальный индекс в поле set_name.

Затем вы могли бы использовать SQL, который будет выполнять INSERT, если set_name отсутствует в вашей таблице, и UPDATE, если set_name находится в таблице. SQL для этой работы объясняется здесь :

INSERT INTO t1 (set_name, set_value) VALUES ('$cb_name', '$cb_value')
ON DUPLICATE KEY UPDATE set_name = '$cb_name', 
                        set_value = '$cb_value';
...