Salut tout le monde, je viens a vous car depuis pas mal de temps, je suis entrain de galérer.
Table Articles :

`articles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `content` mediumtext NOT NULL,
  `price` float NOT NULL,
  `created` datetime NOT NULL,
  `category_id` int(11) NOT NULL,
  `online` bool NOT NULL,
  `shop_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `category_id` (`category_id`),
  KEY `id_shop_articles` (`shop_id`)
)
`shops` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `created` datetime NOT NULL,
  `max_articles` int(11) NOT NULL,
  `article_count` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`)
)

Mon problème actuel se trouve dans ces tables là.
Via Cakephp, je souhaite faire en sorte que lorsque article_count a la même valeur que max_articles, que cela bloque tout ajout possible dans la table articles.
J'ai essayer pas mal de choses mais je n'ai pas eu les résultats attendus.
J'ai suivi la video pour avoir un systeme de draft, article_count se met a jour seulement lorsque Article.online est à true.
Du coup lorsque j'ai un draft en trop et que je l'update en rendant le champs online à true, alors j'ai un article en plus.

max_articles = article_count - 1

Cordialement ;)

3 réponses


Si c'est uniquement lors de la tentative de sauvegarde que tu veux empêcher l'ajout, il te suffit de faire la vérification avec un beforeSave , ou alors, tu peux aussi le faire avec $validate , tu crée une règle de validation sur ton champs max_article qui compare avec le champs article_count , avec un return si le champs max_articles est supérieur à article_count.
Sinon tu peux aussi le faire du côté controller, mais moins conseillé si tu veux tirer parti du MVC.

Airday
Auteur

Merci pour ta reponse Lartak11, je vais faire les différents test que tu viens de propose ;)

De rien, avec plaisir. :)