【问题标题】:SQL insert for multi select list多选列表的 SQL 插入
【发布时间】:2017-09-25 20:27:39
【问题描述】:

我在 Laravel 中实现了bootstrap multi select list,我有一个查询将选定的项目插入数据库,但我的查询只插入 id 编号最低的项目。因此,如果我选择 ID 号为 2 3 4 的员工,则将始终插入 ID 2,其余部分将被忽略。

想象一下我的网络应用会做什么:我有一个汽车维修站,每个维修站都有自己的id。创建新修复时,我首先创建修复实例,然后得到它的 id,然后将其插入到表 repair_employees 中,列如下:“worker_id”“repair_id”。

假设我有id = 87 的新修复。 我从 ID 为234 的多选列表中选择工人。

因此,通过正确的 sql 插入,表格将如下所示:

"repair_id" , "worker_id"
    "87"    ,     "2"
    "87"    ,     "3"
    "87"    ,     "4"

这是我的插入代码:

public function addRepairWorker(Request $request , Vehicle $vehicle, $idcko){

        $workers_needed = null;
        DB::transaction(function () use ($request, $vehicle, $idcko) {

            Log::info('Creating new repair worker instance.');

            $workers_needed = new Repair_worker();
            $workers_needed->repair_id = $idcko;
            $workers_needed->worker_id = $request->worker_id;

            DB::insert('insert into repair_worker (repair_id, worker_id) values (?, ?)',
                    [$workers_needed->repair_id, $workers_needed->worker_id]);

            Log::info('Repair created.');
            flash('Repair successfully added.', 'success');
        });
    }

这里(如果需要)是我对多选列表的看法(form.blade.php):

<select multiple class="form-control" name="worker_id">
        @foreach($workers as $worker)
           <option value="{{ $worker->id }}" 
                        @if(isset($repair_worker) && 
                        ($worker->id == $worker_id)) 
                        selected @endif)>
                        {{ $worker->name }} {{$worker->surname}}
           </option>
         @endforeach
</select>

我需要更改什么来插入所有“工人”?

编辑:

这是我的控制器中的函数,我必须在哪里有一个循环来获取所有数组值?应该循环哪个部分来完成它有点令人困惑。

public function addRepair(Request $request, Customer $customer, Vehicle $vehicle)
{
    $workers = DB::select(DB::raw('select workers.id as id, workers.name as name, workers.surname as surname from workers order by name'));

    if ($request->isMethod('post')) {
        $this->validate($request, [
                'worker_id' => 'required'
                //'part_id' => 'required'
        ]);

        $this->repairsService->createRepair($request, $vehicle);

        foreach ($workers_id as $id){
            $this->repairsService->addRepairWorker($request, $vehicle); //this function does the insert into database
        }

        return redirect()->route('Customers:detailVehicle', ['customer' => $customer, 'vehicle' => $vehicle]);
    }


    return view('repairs.form', ['repair' => null, 'workers' => $workers]);
}

【问题讨论】:

    标签: php sql postgresql laravel


    【解决方案1】:

    首先,通过您在 HTML 中的选择,您需要调整名称(注意方括号)。这将根据您的请求创建一个输入值作为数组。如果你不这样做,你将只有一个值,因为它会覆盖所有以前的值。

    <select multiple class="form-control" name="worker_id[]">
    

    在您的控制器中,您需要遍历 $worker_id 数组并为每个值执行插入操作。

    另外,只需这样做:

    $workers_needed->save();
    

    而不是您的插入语句,因为您首先违背了拥有模型的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多