Salut !
Je suis entrain de créer un système de Like pour des photos et je rencontre un problème:
Le même utilisateur peut liker une même photo plusieurs fois.
Y a t-il un moyen de faire en sorte que la combinaison de deux champs soit unique (pour mon cas user_id et pic_id) à travers les validators de cake ?
Bonjour orion93,
Je sais pas si Cake\Datasource\RulesChecker::existsIn($field, $table, $message = null)
peut résoudre ton problème.
Sinon tu peux créer une règle de validation personnalisée(juste une méthode dans la table):
public function validationDefault(Validator $validator)
{
$validator
// ...
->add('pic_id', $this->_exist());
return $validator;
}
/**
* Return the exist validation rule
* @return array
*/
public function _exist()
{
return [
'_exist' => [
'rule' => function ($value, $context) {
$conditions = [
'user_id' => $context['data']['user_id'],
'pic_id' => $context['data']['pic_id'],
];
// on update
if (isset($context['data']['id'])) {
$conditions += ['id !=' => $context['data']['id']];
}
return ($this->exists($conditions)) ? false : true;
},
'on' => function ($context) {
return isset($context['data']['user_id'], $context['data']['pic_id']);
},
'last' => true,
'message' => "Votre message",
]
];
}
Salut,
A travers les validators de cake aucune idée,
Mais en SQL, on peut mettre une clé primaire sur plusieurs champs ;)
Merci Alex pour ta réponse mais je pense qu'on peut le faire avec les validator de cake. ça fait un moment que je cherche dans la doc, dès que je trouve quelque chose je poste ici.