Laravel Eloquent -我可以使用数组作为列的列表来执行SQL语句吗?

jpfvwuh4  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(84)

我正在创建一个虚拟商店的网站,我正试图做一个产品注册页面。
产品表单中的一些字段不是必需的,所以我需要一种方法来让我的Controller只添加与接收到的输入匹配的列。
我试过用关联数组来做,其中["column-name"=>"column-input"],但是当我试着运行查询时,Laravel认为所有的数组行都是不同的插入查询,只有DB的第一列,就像这样:

SQL: insert into `produtos` (`nome`) values (Smartphone Samsung Galaxy A34 128GB), (Marca:Samsung Modelo:Galaxy), (1),[...]

字符串
理想的行为将是沿着以下路线:

SQL: insert into `produtos` (`nome`,`descricao`,`ativado`,[...]) values ("Smartphone Samsung Galaxy A34 128GB","Marca:Samsung Modelo:Galaxy", 1,[...])


下面是控制器代码:

public function insert($post){
        $campos = Array();   // fields array
        foreach($post as $key=>$value){
            array_push($campos,[$key=>$value]);
        }

        $query = DB::table('produtos')->insert($campos);
        return $campos['url'];
    }


我有什么办法可以做到吗?

wfveoks0

wfveoks01#

Laravel的Eloquent ORM中的create方法是一种创建新模型示例并将其持久化到数据库的便捷方法

Produtos::create($campos);

字符串

lvjbypge

lvjbypge2#

要在验证输入后将数据插入到produtos表中,您可以将Laravel验证与DB::table insert方法结合使用。

public function insert($post){
  $campos = Array();    
  foreach($post as $key=>$value){
      array_push($campos,[$key=>$value]);
  }

  $data = $this->validateForm(new Request($campos));
  DB::table('produtos')->insert($data);
  return $campos['url'];
}

字符串
验证函数如下所示。用laravel提供的必要验证更新字段。要了解更多关于验证的信息,请访问laravel文档https://laravel.com/docs/10.x/validation#working-with-validated-input

public function validateForm(Request $request)
    {
        return $this->validate($request, [
            'nome'           => ["required"],
            'descricao'      => ["required"],
            'ativado'        => ["required"],
        ]);
    }

相关问题