Ma tentative d'appliquer cette example à CakePHP3: tables users
et messages (id, user_id, recipient_id, body)
avec deux clés étrangères à id
dans users
.Relations multiples avec le même modèle de CakePHP 2.x à 3.x CakePHP
Les morceaux de code suivant dans MessagesTable.php
:
$this->belongsTo('Sender', [
'foreignKey' => 'user_id',
'className' => 'Users',
'propertyName' => 'Sender'
]);
$this->belongsTo('Recipient', [
'foreignKey' => 'recipient_id',
'className' => 'Users',
'propertyName' => 'Recipient'
]);
en MessagesController.php
dans view
et index
méthodes:
$message = $this->Messages->get($id, [
'contain' => ['Users'],
'contain' => ['Sender'],
'contain' => ['Recipient']
]);
dans UsersTable.php
:
$this->hasMany('MessagesSent', [
'foreignKey' => 'user_id',
'className' => 'Messages',
'propertyName' => 'MessagesSent'
]);
$this->hasMany('MessagesReceived', [
'foreignKey' => 'recipient_id',
'className' => 'Messages',
'propertyName' => 'MessagesReceived'
]);
et en UsersController.php
dans view
méthode:
$user = $this->Users->get($id, [
'contain' => ['MessagesSent'],
'contain' => ['MessagesReceived']
]);
ne montrent pas Related Messages
dans cet utilisateur view.ctp
:
<h4><?= __('Related Messages') ?></h4>
<?php if (!empty($user->messages)): ?>
<table cellpadding="0" cellspacing="0">
<tr>
<th scope="col"><?= __('Id') ?></th>
<th scope="col"><?= __('User Id') ?></th>
<th scope="col"><?= __('Recipient Id') ?></th>
<th scope="col"><?= __('Body') ?></th>
</tr>
<?php foreach ($user->messages as $messages): ?>
<tr>
<td><?= h($messages->id) ?></td>
<td><?= h($messages->user_id) ?></td>
<td><?= h($messages->recipient_id) ?></td>
<td><?= h($messages->body) ?></td>
</tr>
<?php endforeach; ?>
</table>
Si je laisse seulement hasMany('Messages')
dans UsersTable.php
et 'contain' => ['Messages']
à UsersController.php
, je ne vois Related Messages
dans le view
ci-dessus, mais évidemment seulement ceux, liés à l'expéditeur.
Dans les deux cas add
et edit
messages dans Erreur: Table "App\Model\Table\MessagesTable" is not associated with "Users"
.
Y at-il un moyen de résoudre ce problème dans CakePHP3.x sans ajouter une table de jointure? J'ai le sentiment que je n'utilise pas correctement les alias, mais je ne peux pas savoir exactement où.
Merci!L'erreur est partie et je peux ajouter et éditer des messages, c'est génial. J'ai changé partout dans le view.ctp ci-dessus 'messages' à 'messages_sent', mais toujours rien n'apparaît dans "Related Messages". Dois-je également changer quelque chose dans l'entité du message elle-même et/ou les contrôleurs? –
Salut Vincent, je ne sais pas si je comprends bien la question que vous posez. Pour autant que je puisse voir, il n'y a rien d'autre à changer. –