Сохранение связанной с Cakephp таблицы

#cakephp #save #linked-tables

#cakephp #Сохранить #связанные таблицы

Вопрос:

Попытка сохранить данные из 2 моделей в связанной таблице и дополнительные данные, вычисленные из значений столбцов в одной модели.

Модель подписки:

 class Subscription extends AppModel {
    public $hasAndBelongsToMany = array('User');
}
 

Пользовательская модель:

 class User extends AppModel {
     public $hasAndBelongsToMany = array('Subscription','Role');
}
 

Объединено с таблицей subscriptions_users.

Вот как я сохраняю сообщение в методе User Controller -> register

     if($this->User->save($this->request->data))
    {
        // Add row to subscriptions_users
        $this->Subscription->User->create();

        // Format the request data for associated table subscriptions_users
        $data = $this->Subscription->handle_linked_subscription_request_data($this->request->data);

        // Save data to subscriptions_users
        $this->Subscription->User->saveAll($data);

        // Proceed to confirm
        $this->confirm($subdata_userdata);
    }
 

Функция handle_link-linked_subscription_request_data в модели подписки:

 public function handle_linked_subscription_request_data($data)
{

// Set array for data -> subscriptions_users
$linked_data = array();

if(isset($data) amp;amp; !empty($data))
{
    // Get subscriptiondata to be used in calculations valid_until, terminate_at ...
    $this_subscription = $this->findById($data['User']['register_subscription_id']);
    if(isset($this_subscription) amp;amp; !empty($this_subscription))
    {
        $linked_data['Subscription']['id'] = $data['User']['register_subscription_id'];
        $linked_data['User']['id'] = $data['User']['id'];

        // Add number of months from current date to binding ends
        $linked_data['valid_until'] = date('Y-m-d', strtotime(" 1 month"));
        $linked_data['activated'] = date('Y-m-d');
        $linked_data['binding_to'] =  date('Y-m-d', strtotime(" " . (int)$this_subscription['Subscription']['binding_months'] . " months"));

    }
    else
    {
        return false;
    }
}
else
{
    return false;
}

    unset($data);
    return $linked_data;
}
 

Id, user_id и subscription_id работают и вставляются в «таблицу ссылок»
subscription_users, но дополнительные данные:

 $linked_data['valid_until'] = date('Y-m-d', strtotime(" 1 month"));
        $linked_data['activated'] = date('Y-m-d');
        $linked_data['binding_to'] =  date('Y-m-d', strtotime(" " . (int)$this_subscription['Subscription']['binding_months'] . " months"));
 

Просто не будет вставлять, я пробовал разные способы вставки, изменяя индексы массива.

И идеи, как я мог бы улучшить это ужасное решение, были бы с благодарностью оценены 🙂

Редактировать: решил это, отформатировав массив таким образом, но все равно так некрасиво.

         $linked_data['Subscription']['User'] = array(
                            'subscription_id' => $data['User']['register_subscription_id'],
                            'user_id' => $data['User']['id'],
                            'valid_until' => date('Y-m-d', strtotime(" 1 month")),
                            'activated' => date('Y-m-d'),
                            'binding_to' => date('Y-m-d', strtotime(" " . (int)$this_subscription['Subscription']['binding_months'] . " months"))
            );