【问题标题】:How Can I Save Multiple Check Box Value Into Different Rows In SQL Database By Laravel?如何通过 Laravel 将多个复选框值保存到 SQL 数据库中的不同行中?
【发布时间】:2019-04-04 13:23:22
【问题描述】:

我有一个如下图所示的表格:
我有 set_name(Numbers 1 2 3 ...) 和 set_value(0 OR 1) 的多个值。
这是我的数据库表:

例如,如果我检查了数字 1、数字 2 和数字 6,然后单击保存按钮。
首先检查是否存在与我检查的名称相同的值,是否在数据库中的 set_name 中,如果有值(set_name) ,请更新 set_value其中为 1 否则,如果没有任何 set_name 和任何具有该名称的行,创建一行,名称为 1、2 和 6,然后将它们的 set_value 设置为 1 我如何使用 laravel 完成这项工作?

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: mysql laravel checkbox eloquent laravel-5.8


【解决方案1】:

首先您需要更改表设计,在set_name 字段上设置主键或唯一索引。

然后,如果set_name 不在您的表中,您可以使用执行 INSERT 的 SQL,如果 set_name 在表中,则执行 UPDATE。该作业的 SQL 解释为here:

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

【讨论】:

  • 感谢@kiks73 的回复,但我想在 laravel 中编写代码而不是 PHP!
【解决方案2】:

假设以下 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]);
}

来自the docs

firstOrCreate 方法将尝试使用给定的列/值对来定位数据库记录。如果在数据库中找不到模型,则会插入一条记录,其中包含第一个参数中的属性以及可选的第二个参数中的属性。

【讨论】:

  • 嗨@Thomas,当我只使用 1 个输入时,您的代码效果很好!但是当我使用如下的多个输入时:您的代码不起作用,它只使用第一个输入名称和值 0 创建!像图片 >>!3 我如何将您的代码用于 1 个以上的输入?谢谢
  • &lt;label&gt;&lt;input type="hidden" name="name[]" value="Number 1"/&gt; &lt;input type="checkbox" name="value[Number 1]" value="1"/&gt; Number 1 &lt;/label&gt; &lt;label&gt; &lt;input type="hidden" name="name[]" value="Number 2"/&gt; &lt;input type="checkbox" name="value[Number 2]" value="1"/&gt; Number 2 &lt;/label&gt; ...
猜你喜欢
  • 1970-01-01
  • 2019-08-29
  • 2019-11-24
  • 1970-01-01
  • 2018-05-08
  • 2017-09-05
  • 2017-01-29
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多