代码之家  ›  专栏  ›  技术社区  ›  Norman Edance

数组到DB::insert()->values(),这与列的顺序不同

  •  0
  • Norman Edance  · 技术社区  · 7 年前

    大家好! 我试图将数据作为数组从 模型 ,然后将数据粘贴到 查询生成器 ,但数据的顺序必须与列中指定的顺序相同。

    • 我有什么选择?
    • 你认为这是一种不好的做法吗?

    控制器:

                $responseNotes = Model::factory('Notes')-> createTicket([
                    'description'   => htmlspecialchars($_POST['description']),
                    'contact_id'    => $_POST['contact_id'],
                    'pref_contact'  => $_POST['pref_contact'],
                    'dog_id'        => $_POST['document_id'],
                    'type'          => $_POST['type'],
                    'owner_id'      => Auth::instance()->get_user()->id,
                    'cc'            => $_POST['cc-emails'],
                    'title'         => $_POST['title']
                ]);
    

    型号:

    public function createNote(array $data)
    {
        $columns = [
            'type',
            'owner_id',
            'cc',
            'title',
            'description',
            'contact_id',
            'pref_contact',
            'dog_id'
        ];
        if (!array_diff($columns, array_keys($data))) {
            // All needed values exists
            $result = DB::insert($this->NOTES, $columns)-> values($data)-> execute($this->SCHEMA);
        }
        return  ($result) ? $result : false ;
    }
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   Norman Edance    6 年前

    幸亏 this answer . 解决方法:

    // Order $data array according to $column.values
    $orderedData = [];
    foreach ($columns as $key) {
        $orderedData[$key] = $data[$key];
    }
    $result = DB::insert($this->TICKETS, $columns)
        -> values($orderedData)
        -> execute($this->SCHEMA);
    
        2
  •  0
  •   bato3    7 年前

    为什么不使用 ORM Model ?

    在控制器中:

    $responseNotes = ORM::factory('Notes')-> values([
                    'description'   => htmlspecialchars($_POST['description']),
                    'contact_id'    => $_POST['contact_id'],
                    'pref_contact'  => $_POST['pref_contact'],
                    'dog_id'        => $_POST['document_id'],
                    'type'          => $_POST['type'],
                    'owner_id'      => Auth::instance()->get_user()->id,
                    'cc'            => $_POST['cc-emails'],
                    'title'         => $_POST['title']
                ])
    try{
       $responseNotes->save();
    } catch (ORM_Validation_Exception $ex) { 
       print_r($ex->errors('models'));
    }
    

    不要使用 htmlspecialchars($_POST['description'])

    在模型类中修改函数( doc ):

    public function filters()
    {
        return array(
          'description' => array( array('htmlspecialchars') ),
        );
    }
    
        3
  •  0
  •   leosek    6 年前

    看起来有一个关联数组,其结构db\u column=>价值观对吗?然后您可以简单地插入如下内容:

    DB::Insert('table_name',array_keys($data))->values(array_values($data))->execute();