Bonjour à tous,
Après plusieurs recherche, je n'arrive pas à trouver une solution à mon probème.
J'ai une table Sandwich_Shop avec un champs idAddress avec comme contrainte qu'il doit correspondre au champs id de ma table Address.
Voici mon code:
class SandwichShop extends AppModel{
public $name = 'SandwichShop';
public $useTable = 'sandwich_shops';
//public $hasOne = 'Address';
var $hasOne = array(
'Address' => array(
'className' => 'Address',
'foreignKey' => 'idAddress'
)
);
class Address extends AppModel{
public $name = 'Address';
public $useTable = 'Address';
var $hasOne = array(
'SandwichShop' => array(
'className' => 'SandwichShop',
'foreignKey' => 'idAddress'
)
);
}
Et voici l'erreur:
Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`a6950034_sand`.`sandwich_shops`, CONSTRAINT `sandwich_shops_ibfk_1` FOREIGN KEY (`idAddress`) REFERENCES `address` (`id`) ON DELETE CASCADE)
Lorsque je demande d’exécuter la ligne:
$this->SandwichShop->save($d,true,array('password','username','street','cp','city','country'));
Je suis pas sur mais je pense que le $hasOne du model SandwichShop devrait être remplacé par un belongsTo.
class SandwichShop extends AppModel{
public $name = 'SandwichShop';
public $useTable = 'sandwich_shops';
var $belongsTo = array(
'Address' => array(
'className' => 'Address',
'foreignKey' => 'idAddress'
)
);
Voilà j'ai enfin réussi, merci snap pour ton aide, voici la solution:
class SandwichShop extends AppModel{
public $name = 'SandwichShop';
public $useTable = 'sandwich_shops';
public $belongsTo= array(
'Address' => array(
'className' => 'Address',
'foreignKey' => 'idAddress'
)
);
class Address extends AppModel{
public $name = 'Address';
public $useTable = 'Address';
public $hasOne = 'SandwichShop';
}
Bonjour,
Vérifie la requête que Cake te génère. A priori il lui manque la clé étrangère et c'est pour ça que mysql te génère une erreur de contraintes d'intégrité. Si tu arrives à visualiser la requête, tu comprendras certainement d'où vient ton erreur...
Happy Baking !
Fait attention tu devrait laisser le model Adress comme avant avec 'foreignKey' => 'idAddress' car ta requête marche sans mais si tu fait une requête dans ton controller Adress (ou autre part d'ailleurs)
$this->Adress->find('all');
ça ne marchera pas sans le 'foreignKey' => 'idAddress' dans le model Adress