gpt4 book ai didi

php - 与同一模型 : from CakePHP 2. x 到 CakePHP 3.x 的多重关系

转载 作者:行者123 更新时间:2023-11-30 21:54:35 26 4
gpt4 key购买 nike

我尝试应用此 example到 CakePHP3:表格 usersmessages (id, user_id, recipient_id, body)用两个外键指向 idusers .

以下代码在MessagesTable.php中:

    $this->belongsTo('Sender', [
'foreignKey' => 'user_id',
'className' => 'Users',
'propertyName' => 'Sender'
]);
$this->belongsTo('Recipient', [
'foreignKey' => 'recipient_id',
'className' => 'Users',
'propertyName' => 'Recipient'
]);

MessagesController.phpviewindex方法:

    $message = $this->Messages->get($id, [
'contain' => ['Users'],
'contain' => ['Sender'],
'contain' => ['Recipient']
]);

UsersTable.php :

    $this->hasMany('MessagesSent', [
'foreignKey' => 'user_id',
'className' => 'Messages',
'propertyName' => 'MessagesSent'

]);

$this->hasMany('MessagesReceived', [
'foreignKey' => 'recipient_id',
'className' => 'Messages',
'propertyName' => 'MessagesReceived'
]);

并在UsersController.phpview方法:

    $user = $this->Users->get($id, [
'contain' => ['MessagesSent'],
'contain' => ['MessagesReceived']
]);

不显示Related Messages在这个用户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>

如果我只留下hasMany('Messages')UsersTable.php'contain' => ['Messages']UsersController.php ,我确实看到了 Related Messagesview以上,但显然只有那些与发件人有关。

在这两种情况下 addedit消息导致错误:Table "App\Model\Table\MessagesTable" is not associated with "Users" .

有没有办法在 CakePHP3.x 中解决这个问题而不添加连接表?我有一种感觉,我没有正确使用别名,但我无法弄清楚确切的位置。

最佳答案

首先,除非你在 MessagesTable.php 中有这样的东西:

$this->belongsTo('Users', []);

“表“App\Model\Table\MessagesTable”未与“用户”相关联”是正确的。所以在 MessagesController.php 中你应该只包含收件人和发件人:

$message = $this->Messages->get($id, [
'contain' => ['Sender', 'Recipient'],
]);

关于“相关消息”问题,您应该考虑如果您包含“MessagesSent”和“MessagesReceived”,您的实体将不会有一个“消息”数组,而是两个不同的数组,分别称为“messages_received”和“messages_sent”。

关于php - 与同一模型 : from CakePHP 2. x 到 CakePHP 3.x 的多重关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45776562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com