2017-09-05 93 views
0

我是新來的PHP和MySQL,但有一個項目,我必須對我的類與Silex 2.0和Symfony做和我有我的PHP代碼和外國的問題數據庫中我的產品表中的鍵。PHP/MySQL外鍵將id = 0保存爲數據庫

問題是在我的程序中保存功能的正確方法。

下面是我的數據的基礎上發生的事情,當我嘗試添加或編輯新產品 - 我得到idCategory和idProducent = 0:/

而且有我的代碼部分ProductModel.php負責保存它數據庫(表產品):

public function addProduct($data) 
{ 
    $sql = 'INSERT INTO 
       `products` (`id`, `idCategory`, `idProducent`, `name`, `price_netto`, `price_brutto`, `desc`) 
      VALUES 
       (NULL,?,?,?,?,?,?)'; 
    $data['price_netto'] = $data['price_brutto'] * 1.22; 
    $this->_db->executeQuery(
     $sql, array(
     $data['idCategory'], $data['idProducent'], $data['name'], 
     $data['price_netto'], $data['price_brutto'], $data['desc']) 
    ); 
} 
public function saveProduct($data) 
{ 
    if (isset($data['id']) && ctype_digit((string)$data['id'])) { 
     $sql = "UPDATE 
        products 
       SET 
        idCategory = ?, idProducent = ?, name = ?, 
        price_netto = ?, price_brutto = ?, `desc` = ? 
       WHERE 
        id = ?"; 
     $data['price_netto'] = $data['price_brutto'] * 1.22; 
     $this->_db->executeQuery(
      $sql, array(
      $data['idCategory'], $data['idProducent'], $data['name'], 
      $data['price_netto'], $data['price_brutto'], $data['desc'], $data['id']) 
     ); 
    } else { 
     $sql = "INSERT INTO 
        `products` (`id`, `idCategory`, `idProducent`, `name`, `price_netto`, `price_brutto`, `desc`) 
       VALUES 
        (NULL,?,?,?,?,?,?)"; 
     $data['price_netto'] = $data['price_brutto'] * 1.22; 
     $this->_db->executeQuery(
      $sql, array($data['id']), array(
      $data['idCategory'], $data['idProducent'], $data['name'], 
      $data['price_netto'], $data['price_brutto'], $data['desc']) 
     );   
    } 
} 

這裏有ProductController.php [我認爲部分是很重要的位置]: https://codeshare.io/5w4rRD

而且從ProducentsModel.php和CategoriesModel.php功能:

public function getProducents() 
{ 
    $sql = 'SELECT * FROM producents;'; 
    return $this->_db->fetchAll($sql); 
} 
public function getCategories() 
{ 
    $sql = 'SELECT * FROM categories;'; 
    return $this->_db->fetchAll($sql); 
} 

對不起,讓你只鏈接但是這是我第一次與堆棧溢出,希望你能夠理解。

+1

你能分享你的表格結構嗎? –

+0

http://screenshot.sh/oe5YXJ1HXU3Jq http://screenshot.sh/n9GN2B179sVUM – Abadd0n

+0

您使用的是MyISAM還是InnoDB? –

回答

0

數據庫的罰款。該錯誤是在ProductController.php中,你可以在那裏找到鏈接。這是怎麼想的樣子在這兩個編輯和添加選項:(!$ i = 0; $測試[$ i] = NULL; $ I ++)

爲{ $ choiceCategory [$測試[$ i] ['name']] = $ test [$ i] ['id'] ;; }

$producentModel = new ProducentsModel($app); 
    $test = $producentModel->getProducents(); 

    $choiceProducent = array(); 

    for ($i=0; $test[$i] != NULL; $i++) { 
     $choiceProducent[$test[$i]['name']] = $test[$i]['id']; 
    } 

,並刪除這個:choice_label直到placeholder=>'Choose'

對不起,打擾你們,並感謝您快速回答。

0

不要複製此逐字但你的SQL缺少這樣的:

CREATE TABLE `products` (
    id INT UNISIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 

    ... missing part below 

    CONSTRAINT `FKID_CATEGORY_ID` FOREIGN KEY (`idCategory`) REFERENCES `categories` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

CREATE TABLE IF NOT EXISTS `products` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `idCategory` int(10) unsigned DEFAULT NULL, 
    `idProducent` int(10) unsigned DEFAULT NULL, 
    `name` char(32) COLLATE utf8_bin NOT NULL, 
    `price_netto` float NOT NULL, 
    `price_brutto` float unsigned NOT NULL, 
    `desc` text COLLATE utf8_bin, 
    PRIMARY KEY (`id`), 
    KEY `FK_products_1` (`idCategory`), 
    KEY `FK_products_2` (`idProducent`), 
    CONSTRAINT `FK_products_1` FOREIGN KEY (`idCategory`) REFERENCES `categories` (`id`), 
    CONSTRAINT `FK_products_2` FOREIGN KEY (`idProducent`) REFERENCES `producents` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
+0

我做了你所說的,我添加了表格類別和產品的外鍵,這裏是我有: http://screenshot.sh/mE94ENVCQ2zgE http://screenshot.sh/ m7wozmtmkH41y – Abadd0n

+0

這是可以預料的。完整性約束是阻止您刪除父項並將其作爲幻影記錄留下的「子項」。如果兩者可以獨立存在,FK需要爲NULL。 –

+0

發佈您的SQL架構的轉儲 - 在文本形式,所以我可以快速複製和粘貼:) –

相關問題