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

问题描述 投票:0回答:3

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

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

控制器:

            $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 ;
}
php arrays model-view-controller query-builder kohana
3个回答
3
投票

感谢这个答案。解决了这个问题:

// 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);

0
投票

为什么不使用

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') ),
    );
}

0
投票

看起来您有结构为 db_column=>value 的关联数组,对吧?您可以简单地像这样插入:

DB::Insert('table_name',array_keys($data))->values(array_values($data))->execute();
© www.soinside.com 2019 - 2024. All rights reserved.