Je sais que le titre ne décrit pas le meilleur que je veux atteindre, mais je ne pouvais pas penser à autre chose.CakePHP afficher les champs personnalisés du tableau
Disons que j'ai le tableau suivant:
[Sender] => Array
(
[0] => Array
(
[id] => 1
[username] => admin
[PrivateMessagesUser] => Array
(
[id] => 1
[private_message_id] => 1
[sender_id] => 1
[recipient_id] => 3
[sender_status] => 1
[recipient_status] => 0
[random_key] =>
)
)
[1] => Array
(
[id] => 1
[username] => admin
[PrivateMessagesUser] => Array
(
[id] => 3
[private_message_id] => 1
[sender_id] => 1
[recipient_id] => 2
[sender_status] => 1
[recipient_status] => 0
[random_key] =>
)
)
)
J'utilise le ContainableBehaviour pour couper des données supplémentaires. Mon problème est: comment puis-je filtrer le Sender
s après une clé qui est présent dans PrivateMessagesUser
? Dire que j'ai besoin seulement de Sender
où PrivateMessagesUser.recipient_id = 3
. J'ai essayé avec
'Sender' => array(
'PrivateMessagesUser' => array(
)
),
mais cela n'a pas fonctionné. On dirait que je dois dépasser les touches [0], [1] ... et je ne sais pas comment.
Toute aide serait appréciée!
EDIT
Voilà comment j'obtenir le tableau affiché ci-dessus:
$this->paginate = array(
'conditions' => array(
'PrivateMessage.id' => $this->__getUserPrivateMessagesInbox()
),
'contain' => array(
'Sender' => array(
'fields' => array('id', 'username'),
'PrivateMessagesUser' => array(
'fields' => array('PrivateMessagesUser.id')
//'conditions' => array('PrivateMessagesUser.recipient_id' => $this->Auth->user('id'))
)
),
'Recipient' => array(
'fields' => array('id', 'username'),
'conditions' => array('Recipient.id' => $this->Auth->user('id'))
)
)
);
Comment puis-je modifier ces lignes afin d'obtenir le résultat souhaité?
EDIT 2
J'appelle la paginate() du PrivateMessagesController.
Associations:
Modèle utilisateur:
var $hasAndBelongsToMany = array(
'PrivateMessageSent' => array(
'className' => 'PrivateMessage',
'joinTable' => 'private_messages_users',
'foreignKey' => 'sender_id',
'associationForeignKey' => 'private_message_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
),
'PrivateMessageReceived' => array(
'className' => 'PrivateMessage',
'joinTable' => 'private_messages_users',
'foreignKey' => 'recipient_id',
'associationForeignKey' => 'private_message_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
PrivateMessage Modèle:
var $hasAndBelongsToMany = array(
'Sender' => array(
'className' => 'User',
'joinTable' => 'private_messages_users',
'foreignKey' => 'private_message_id',
'associationForeignKey' => 'sender_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
),
'Recipient' => array(
'className' => 'User',
'joinTable' => 'private_messages_users',
'foreignKey' => 'private_message_id',
'associationForeignKey' => 'recipient_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
),
);
PrivateMessagesUser Modèle:
var $belongsTo = array(
'PrivateMessage' => array(
'className' => 'PrivateMessage',
'foreignKey' => 'private_message_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Sender' => array(
'className' => 'User',
'foreignKey' => 'sender_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Recipient' => array(
'className' => 'User',
'foreignKey' => 'recipient_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
et les tables de base de données ressemblent à:
users
:id
,username
...private_messages
:id
,subject
...private_messages_users
:id
,private_message_id
,sender_id
,recipient_id
,status
, ...
Cela n'a pas de sens: un message privé peut avoir plusieurs expéditeurs? Plusieurs destinataires semblent communs. À moins que ce ne soit une forme de fonctionnalité filetée. – RabidFire
Vous avez raison, il n'y a qu'un seul expéditeur. Mais je pensais que si j'ai 2 relations différentes pour le même modèle n'est pas correct. Comment suggérez-vous de changer ces relations afin de donner un sens et de garder la fonctionnalité? – linkyndy