Bonjour,
Je souhaiterais faire un find avec une condition sur un ou plusieurs champs dans la traduction.
Exemple :
$this->Post->locale = 'eng;
$post = $this->Post->find('all',array(
'conditions' => array(
'Post.name' => 'title'
)
));
Le problème c'est que la condition fonctionne seulement sur la table posts.
Si quelqu'un a une idée.
Merci d'avance
Je comprend mais je pense que je vais faire deux champs dans la table posts avec statut_fra et statut_eng puis faire la condition sur ces champs la.
Merci
Bonjour.
J'ai du mal à te comprendre là.
Normalement tu fais une requête soit sur un id ou un slug par exemple et non sur un titre.
Dans quel cas exactement fais-tu cette requête ?
Plus précisément, j'ai des articles (posts) en plusieurs langues et avec un statut différent dans les 2 langues.
Car un post peut être en ligne en français mais pas en anglais.
PostModel.php
public $actsAs = array(
'Translate' => array(
'name' => 'nameTranslate',
'content' => 'contentTranslate',
'statut' => 'statutTranslate'
)
);
Et je souhaiterais faire un find avec comme condition statut = 1 dans la langue actuelle.
PostsController.php
$this->Post->locale = 'fra';
$posts = $this->Post->find('all',array(
'conditions' => array(
'Post.statut' => 1,
'Post.date <' => date("Y-m-d H:i:s")
)
));
Le problème c'est que ça fait la condition que sur la table post et non sur la table i18n
Je n'arrive pas à trouver une solution simple pour que cela fonctionne
Bonjour.
Les champs dans la table de traduction, sont fait pour du contenu à traduire, donc ton champs concernant le statut, n'a aucun lieu d'être.
Le Behavior considère par principe que si tu demandes un enregistrement traduit, c'est qu'il est disponible.
Tu peux donc faire des conditions sur ta table de base (donc posts dans ton cas) et non sur la table de traductions étant donné que le Behavior fait lui-même l'association entre les deux tables lorsque tu fais appel à lui pour ta requête.
Ou alors, tu laisses ton champs pour le statut pour la table de traduction et avant de renvoyer ta variable contenant les enregistrements à la vue, tu fais un foreach
dans lequel tu supprimes les enregistrements dont la traduction ont un statut égal à 0
avec une condition sur la valeur du champ.
De cette manière, dans ta vue, la variable n'aura que les enregistrements dont le statut est égal à 1
.
Tu peux également faire une fonction dans ton modèle, qui permettra de faire le filtrage directement et te retourner uniquement les enregistrements avec le statut à 1
.