2015-07-02 63 views
1

我正在打開購物車中創建模型。使用vqMod我正在模型中編寫代碼。 我想通過添加一個coloumn來改變表格,如果它不存在於表格中的話。 這是我的代碼。如果在sql中不存在添加列Opencart

$field_name = 'GeoZoneID'; 
$col = $this->db->query("SELECT ".$field_name." FROM ".DB_PREFIX."order"); 

    if (!$col){ 
      $this->db->query("ALTER TABLE ".DB_PREFIX."order ADD ".$field_name." int(11) First"); 
      $zone_id=array(); 
    $zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM `oc_zone_to_geo_zone` AS zgz WHERE zone_id = (SELECT shipping_zone_id FROM oc_order WHERE order_id = '".$order_id."') "); 
    $zone_id=$zone_id->row['geo_zone_id']; 
    $query=$this->db->query("UPDATE `oc_order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'");     
     } 
    else { 
    $zone_id=array(); 
    $zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM `oc_zone_to_geo_zone` AS zgz WHERE zone_id = (SELECT shipping_zone_id FROM oc_order WHERE order_id = '".$order_id."') "); 
    $zone_id=$zone_id->row['geo_zone_id']; 
    $query=$this->db->query("UPDATE `oc_order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'");     

     } 

我不知道爲什麼它不執行它不會改變我的tabel。

+0

只是一個建議(可能無法解決問題):將'$ col'查詢更改爲''「顯示來自'」的列。 DB_PREFIX。 「_order」其中'Field' ='{$ field_name}'「'',然後使用'if($ col-> num_rows == 0)' –

+0

進行檢查,如果提供更多關於哪個部分不是執行 –

回答

1

我結束了我的固定問題,這樣的..

$hasModelChoiceField = FALSE; 
$result = $this->db->query("DESCRIBE `".DB_PREFIX."order`;"); 
foreach ($result->rows as $row) { 
if ($row['Field'] == 'GeoZoneID') { 
$hasModelChoiceField = TRUE; 
break; 
} 
} 
if (!$hasModelChoiceField) { 
$sql = "ALTER TABLE `".DB_PREFIX."order` ADD GeoZoneID INT(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT ''"; 
$this->db->query($sql); 
$zone_id=array(); 
$zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM `" . DB_PREFIX . "oc_zone_to_geo_zone` AS zgz WHERE zone_id = (SELECT shipping_zone_id FROM `".DB_PREFIX."order`WHERE order_id = '".$order_id."') ");$zone_id=$zone_id>row['geo_zone_id'];$query=$this->db->query("UPDATE `" . DB_PREFIX . "order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'"); 
} 
else{ 
    $zone_id=array(); 
    $zone_id=$this->db->query("SELECT zgz.geo_zone_id FROM`oc_zone_to_geo_zone` AS zgzWHERE zone_id = (SELECT shipping_zone_idFROM oc_orderWHERE order_id = '".$order_id."') ");$zone_id=$zone_id->row['geo_zone_id'];$query=$this->db->query("UPDATE `" . DB_PREFIX . "order` SET GeoZoneID ='".$zone_id."' WHERE order_id ='".$order_id."'"); 

}

0

只需使用下面的功能模型中的一部分。如果在DB中不存在,它將創建您的列。

public function checkFieldInModel() { 
    $isModelField = FALSE; 
    $result = $this->db->query("DESCRIBE `".DB_PREFIX."order`;"); 
    foreach ($result->rows as $row) { 
    if ($row['Field'] == 'GeoZoneID') { 
     $isModelField = TRUE; 
     break; 
    } 
    } 
    if (!$isModelField) { 
    $sql = "ALTER TABLE `".DB_PREFIX."option` ADD `GeoZoneID` int(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT ''"; 
    $this->db->query($sql); 
    } 
} 

或者只是添加使用DB列直接將這:

ALTER TABLE database.table_name添加列名DATA_TYPE CHARACTER SET UTF8 COLLATE utf8_general_ci NOT NULL;

ALTER table cart.oc_product_option_value add pc_code varchar(255)CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;