Неперехваченное исключение "Исключение PDOException"
У меня есть скрипт, который позволяет мне добавлять кнопку запроса образца на страницы моего продукта, у меня есть скрипт под названием getSample.php но когда я нажимаю на кнопку "Образец" на странице продукта, я попадаю на getSample.php который показывает эту ошибку:
Неустранимая ошибка: Неперехваченное исключение "Исключение PDOException" с сообщением 'SQLSTATE[23000]: Нарушение ограничения целостности: 1452 Не удается добавить или обновить дочернюю строку: не удается выполнить ограничение внешнего ключа (
japecilot_mage2
.mage_catalog_product_entity
, ОГРАНИЧЕНИЕFK_OZSS_CAT_PRD_ENTT_ATTR_SET_ID_OZSS_EAV_ATTR_SET_ATTR_SET_ID
ВНЕШНИЙ КЛЮЧ (attribute_set_id
) ССЫЛАЕТСЯ НА `набор атрибутов mage_eav_attribute_set)' в /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/духи/lib/Zend/Db/Заявление/Pdo.php:228 Трассировка стека: #0 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Zend/Db/Statement/Pdo.php (228): PDOStatement->выполнить (массив) #1 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Varien/Db/Statement/Pdo/Mysql.php (110): Zend_Db_Statement_Pdo->_выполнить(Массив) #2 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/app/code/core/Zend/Db/Statement.php (291): Varien_Db_Statement_Pdo_Mysql->_выполнить(Массив) #3 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Zend/Db/Adapter/Abstract.php (479): Zend_Db_Statement->выполнить(массив) #4/var/w в/var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Zend/Db/Statement/Pdo.php в строке 234
Код в getSample.php является:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
//print_r($_POST);
require_once 'app/Mage.php';
Mage::app();
Mage::getSingleton("core/session", array("name" => "frontend"));
Mage::getSingleton('core/session')->setSampleError("");
// Store users session
$session = Mage::getSingleton("customer/session");
//Store cart items
$totalNumOfCartItem = Mage::getModel('checkout/cart')->getItemsQty();
//Store cart items
$theitems = Mage::getModel('checkout/cart')->getItems();
$thecount = 0;
foreach($theitems as $ti){
$thename = $ti['name'];
$test = strpos($thename,'Free Sample');
if($test !== false){
$thecount = $thecount+1;
}
}
if(isset($_POST['name'])){
$name = $_POST['name'];
$id = $_POST['id'];
if(isset($_POST['simpleid']) && !empty($_POST['simpleid'])){
$simpleid = $_POST['simpleid'];
}
}
if(isset($_GET['name'])){
$name = $_GET['name'];
if(isset($_GET['simpleid']) && !empty($_GET['simpleid'])){
$simpleid = $_GET['simpleid'];
}
$id = $_GET['id'];
}
// retrict shopping cart to only allow 5 samples
if ($totalNumOfCartItem <= 4)
{
$theproduct = Mage::getModel('catalog/product')->load($id);
if($simpleid){
$thesimple = Mage::getModel('catalog/product')->load($simpleid);
}
if($thecount < 2)
{
// instatiate Product
$product = Mage::getModel('catalog/product');
if($simpleid){
$product->setSku($thesimple->getSku()."*".rand());
} else {
$product->setSku($theproduct->getSku()."*".rand());
}
$product->setName("Sample of ".$name);
// $product->setDescription("Sample of ".$name);
$product->setShortDescription($name." – Sample");
$product->setPrice(0.00);
$product->setTypeId('simple');
$product->setImageUrl($theproduct->getImageUrl()); // set the images from the original product
$product->setThumbnailUrl($theproduct->getImageUrl());
$product->setImage($theproduct->getSmallImage());
$product->setMediaGallery (array('images'=>array (), 'values'=>array ()));
$product->addImageToMediaGallery(Mage::getBaseDir('media')."/catalog/product".$theproduct->getSmallImage(), array('image','small_image','thumbnail'), false, false);
$product->setAttributeSetId("9"); // need to look this up
$product->setCategoryIds("3"); // need to look these up
$product->setWeight(21212121.21);
$product->setTaxClassId(2); // taxable goods
$product->setVisibility(1); // catalog, search
$product->setStatus(1); // enabled
// assign product to the default website
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));
// get product’s general info such price, status, description
$stockData = $product->getStockData();
// update stock data using new data
$stockData['qty'] = 1;
$stockData['is_in_stock'] = 1;
$stockData['manage_stock'] = 1;
$stockData['max_sale_qty'] = 5;
// then set product’s stock data to update
$product->setStockData($stockData);
//die();
// call save() method to save your product with updated data
$product->save();
header("Location: /checkout/cart/add/product/".$product->getId()."/");
}
}
else
{
Mage::getSingleton('checkout/session')->addError("You are only allowed a maximum of 5 sample products");
header("Location: /checkout/cart");
}
?>
Любые идеи о том, как исправить это?
Спасибо.
1 answers
Сообщение об ошибке выглядит так, как будто ваш продукт ссылается на идентификатор attribute_set_id, которого нет в базе данных.
Загляните в свою базу данных в таблицу mage_catalog_product_entity
, найдите свой продукт и найдите столбец attribute_set_id
. Число там, например, 4, должно присутствовать в таблице mage_eav_attribute_set
в столбце id. Если нет, ваш продукт использует набор атрибутов, который больше недоступен.
Эта страница отчасти объясняет, что такое наборы атрибутов: http://inchoo.net/magento/importance-of-planning-attribute-sets/
Одно замечание: Ваш код полностью работает в рамках фреймворка, могут даже возникнуть некоторые проблемы с безопасностью. (используя СООБЩЕНИЕ, заголовок()). Вы также обновляете данные о запасах. Magento делает это, когда клиент фактически завершает процесс оформления заказа, нет необходимости делать это вручную.