Как сохранить данные в CakePHP 2 для 3 дерева, как связанные таблицы - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть 3 дерева, как связанные таблицы.Их схемы следующие:

Member{
//Some column
}

Transactions{
member_id :: foreign key of member table
//Some other column
}

TransactionItems{
transaction_id :: foreign key of Transaction table
//Some other column
}

Я определяю модели следующим образом:

class Members extends AppModel {

    public $primaryKey = 'id';
    public $hasOne = array(
        'Transactions' => array(
            'className' => 'Transactions',
            'foreignKey' => 'member_id',
            'dependent' => true
        )
    );

}


class Transactions extends AppModel {

    public $primaryKey = 'id';

    public $belongTo = array('Members');

    public $hasOne = array(
        'TransactionItems' => array(
            'className' => 'TransactionItems',
            'foreignKey' => 'transaction_id',
            'dependent' => true
        )
    );
}


class TransactionItems extends AppModel {

    public $primaryKey = 'id';

    public $belongTo = array('Transactions');

    public $belongsTo = array(
        'Transactions' => array(
            'className' => 'Transactions',
            'foreignKey' => 'transaction_id'
        )
    );


}

У меня есть массив данных, который я хочу сохранить в базе данных.Моя схема:

Array(

[Members] = [],//Array
[Transactions] = [],//Array
[TransactionItems] = []//Array

)

Проблема в том, что всякий раз, когда я запускаю $this->Members->saveAll($data).Сохраняет данные в таблице Member и Transactions.Но не создавайте данные в таблице TransactionItems.Я хочу сохранить все три таблицы одновременно.

Любая помощь будет благодарна.

1 Ответ

0 голосов
/ 11 декабря 2018

Связи второго уровня (и выше) должны быть вложенными, то есть структура данных должна быть:

array(
    'Members' => array(),
    'Transactions' => array(
        'TransactionItems' => array()
    )
)

Немного неудобно, но вот как это работает в 2.x.Вы всегда можете обратиться к структуре, которая возвращается при чтении данных, она должна быть такой же при сохранении.

Кроме того, вы должны установить опцию deep на true, чтобы иметь возможностьсохранить ассоциации второго уровня и выше (по умолчанию сохраняются только ассоциации первого уровня):

$this->Members->saveAll($data, array('deep' => true));

См. также

...