将数据发送到多个表

我试图做一个聊天系统,我遇到了麻烦,我的理念如下:
当用户发送消息时,该消息必须保存在我的数据库中的两个表中......但它不起作用,消息只保存在一个表中。

公共职能sendMessage()

    $data = $this->request->data();
    $sessionId = $data['idSession'];
    $userId = $this->request->session()->read('Auth.User.id');
    $msg = $data['message'];
    $typeMessage = $data['type'];
    $messageTable = TableRegistry::get('messages');
    $messageAllTable = TableRegistry::get('mensage_alls');
    if ($typeMessage == 1)
    {      
        $message['session_private_id'] = $sessionId;
    }
    else
    {
        $message['session_id'] = $sessionId;
    }
    $message = array_merge($message, array(
        'user_id' => $userId,
        'message' => $msg,
        'created_at' => new DateTime(date("Y-m-d H:i:s")),
    ));
    $messageEntity = $messageTable->newEntity();
    $messageEntity = $messageTable->patchEntity($messageEntity, $message, ['validate' => false]);
    $resposta = $messageTable->save($messageEntity);
    $this->response->body($resposta);
    return $this->response;

我是CakePHP的初学者,所以,不需要叫我哑巴。
从现在开始感谢。 抱歉我的英文不好。


忽略你想要复制数据的原因(通常来说,这听起来不是一件好事),但它不起作用的原因是你永远不会将它保存到第二张表中。 你需要至少打电话给一些事情:

$resposta = $messageTable->save($messageEntity);
$messageCopy = $messageAllTable->newEntity($messageEntity);
$respostaCopy = $messageAllTable->save($messageCopy);
$this->response->body($resposta && $respostaCopy);

如果您的意思是想始终自动复制到辅助表中,则可以将行为添加到主消息表中。 例如,一个简单的版本看起来像这样:

在MessageTable.php中:

namespace AppModelTable;

use CakeORMTable;

class MessageTable extends Table
{

    public function initialize(array $config)
    {
        // Add this line
        $this->addBehavior('CopyMessage');
    }
}

并创建一个src / Model / Behavior / CopyMessageBehavior.php:

namespace AppModelBehavior;

use CakeORMBehavior;

class CopyMessageBehavior extends Behavior
{
    public function copyMessage(Entity $entity)
    {
        $messageAllTable = TableRegistry::get('mensage_alls');
        $messageCopy =messageAllTable->newEntity($messageEntity);
        $messageAllTable->save($messageCopy);
    }
   public function beforeSave(Event $event, EntityInterface $entity)
    {
        $this->copyMessage($entity);
    }
}
链接地址: http://www.djcxy.com/p/58835.html

上一篇: Sending datas to multiple tables

下一篇: Cakephp admin routing Blocking Regular user