php - 如何在 CakePHP 2 中保存 3 棵树(如连接表)的数据

标签 php cakephp orm cakephp-2.0

我有 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)和交易表中。但不要在 TransactionItems 表中创建数据。我想一次保存所有 3 个表。

如有任何帮助,我们将不胜感激。

最佳答案

二级(及以上)关联必须是嵌套的,即数据结构需要是:

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

有点尴尬,但这就是它在 2.x 中的工作原理。您始终可以在读取数据时引用返回的结构,保存数据时它需要相同。

此外,您必须将 deep 选项设置为 true 才能保存二级及以上关联(默认情况下仅保存一级关联):

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

另请参阅

关于php - 如何在 CakePHP 2 中保存 3 棵树(如连接表)的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53722184/

相关文章:

php - Controller 可以查看相关字段,但在添加或编辑操作中不显示它

python - 简单的 Peewee ORM Python Bug - 保存钩子(Hook)

javascript - 防止 sequelize 添加结尾小写 's'

在多个选定的下拉列表中将 PHP 数组转换为字符串

PHP-从磁卡读取数据

php - mysqli_fetch_assoc 未显示所有结果

php - 我怎样才能允许 php 创建与创建它们的文件具有相同所有权的文件?

mysql - 无法连接到数据库: Access denied for user

database - 使用 .po 文件直接从数据库翻译文本

CakePHP 4.1 用户实体作为授权身份关联字段