en utilisant InnoDb avec foreignkey
configuration dans la base de données. Dans Phalcon également configurer les clés virtuelles. obtenir ci-dessous erreur lors de la suppression des enregistrements de phalcon en raison de Foreign Key
configuration et aussi il y a encore des données dans les tableaux enfants.Phalcon: afficher le message d'erreur de fantaisie au lieu des exceptions standard
My Objective is to display fancy error message to user when this error displayed.
Affichage Erreur:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`invoice`.`invoice`, CONSTRAINT `Invoice.CustomerId` FOREIGN KEY (`CustomerId`) REFERENCES `customer` (`Id`))
#0 [internal function]: PDOStatement->execute()
#1 [internal function]: Phalcon\Db\Adapter\Pdo->executePrepared(Object(PDOStatement), Array, Array)
#2 [internal function]: Phalcon\Db\Adapter\Pdo->execute('DELETE FROM `in...', Array, Array)
#3 [internal function]: Phalcon\Db\Adapter->delete(Array, '`Id` = ?', Array, Array)
#4 C:\wamp\www\invoice\app\controllers\CustomerController.php(140): Phalcon\Mvc\Model->delete()
#5 [internal function]: CustomerController->deleteAction('3')
#6 [internal function]: Phalcon\Dispatcher->callActionMethod(Object(CustomerController), 'deleteAction', Array)
#7 [internal function]: Phalcon\Dispatcher->_dispatch()
#8 [internal function]: Phalcon\Dispatcher->dispatch()
#9 C:\wamp\www\invoice\public\index.php(42): Phalcon\Mvc\Application->handle()
#10 {main}
Fancy Message d'erreur que je voulais afficher pour l'utilisateur:
The customer cannot be deleted because other invoices are using it
Ceci est mon modèle ressemble:
<?php
class Customer extends \Phalcon\Mvc\Model
{
public $id;
public $name;
public $street;
public $city;
public $country;
public $postalCode;
public $phone;
public $mobile;
public $fax;
public $email;
public $web;
public function initialize()
{
$this->setSchema("invoice");
$this->setSource("customer");
$this->hasMany(
'Id',
'Invoice',
'Id',
[
'alias' => 'Invoice',
'foreignKey' => [
'message' => 'The customer cannot be deleted because other invoices are using it',
]
]
);
}
public static function find($parameters = null)
{
return parent::find($parameters);
}
public static function findFirst($parameters = null)
{
return parent::findFirst($parameters);
}
public function getSource()
{
return 'customer';
}
}
?>
Le code complet est disponible dans github en cas de référence.
FYI: les modèles et les contrôleurs sont créés en utilisant 'php-devtools' Je crois qu'il n'y aura pas de problèmes dans' relations' –
Attrape l'exception, puis gère-la à ton gré. http://php.net/manual/fr/language.exceptions.php – yogur