Orm Phalcon:在一个事务中保存对新记录的引用
我试图在“隐式事务”下的单个事务中保存对新对象的引用: 我正在创建同一类的两个新对象,一个引用另一个。从文档中可以看出,在保存TreeNodeB时,应在TreeNodeA上执行保存,ID将传递到Orm Phalcon:在一个事务中保存对新记录的引用,orm,save,phalcon,phalcon-orm,Orm,Save,Phalcon,Phalcon Orm,我试图在“隐式事务”下的单个事务中保存对新对象的引用: 我正在创建同一类的两个新对象,一个引用另一个。从文档中可以看出,在保存TreeNodeB时,应在TreeNodeA上执行保存,ID将传递到TreeNodeB->parent\u tree\u node\u ID 这似乎不起作用,当我在save函数中遇到错误时,它仍作为对象传递: Object of class TreeNodes could not be converted to string 我曾尝试在模型中编写一个saveTreePa
TreeNodeB->parent\u tree\u node\u ID
这似乎不起作用,当我在save函数中遇到错误时,它仍作为对象传递:
Object of class TreeNodes could not be converted to string
我曾尝试在模型中编写一个saveTreeParentNodeId函数,并使用别名对其进行设置,但这两种方法似乎都不起作用
$treeNode = new TreeNodes();
$treeNode->setConnectionService(Registry::setConnection(MyModel::MAIN_DB));
$parentNode = $treeNode->findFirst();
$treeNodeA = new TreeNodes();
$treeNodeA->tree_id = $parentNode->tree_id;
$treeNodeA->tree_parent_node_id = $parentNode;
$treeNodeA->tree_level_id = 2;
$treeNodeA->node_desc = "Test Node A";
$treeNodeB = new TreeNodes();
$treeNodeB->tree_id = $parentNode->tree_id;
$treeNodeB->tree_parent_node_id = $treeNodeA;
$treeNodeB->tree_level_id = 3;
$treeNodeB->tree_desc = "Test Node B";
$treeNodeB->save();
模型:
class TreeNodes extends MyModel
{
public $node_id;
public $tree_id;
public $tree_parent_node_id;
public $tree_level_id;
public $node_desc;
public function getSource()
{
return "TreeNodes";
}
public function setTreeParentNodeId(TreeNodes $parentNode){
$this->tree_parent_node_id = $parentNode->node_id;
}
public function initialize()
{
parent::initialize();
$this->belongsTo(
'tree_id',
'Organisations',
'TreeID',
array(
'alias' => 'organisation',
'reusable' => true
)
);
$this->hasOne(
'tree_id',
'TreeType',
'tree_id',
array(
'alias' => 'type',
'reusable' => true
)
);
$this->hasOne(
'tree_parent_node_id',
'TreeNodes',
'node_id',
array(
'alias' => 'parentNode'
)
);
}
}
更新 通过更新模型以使用belongsTo,Phalcon识别父节点
$this->belongsTo(
'tree_parent_node_id',
'TreeNodes',
'node_id',
array(
'alias' => 'parentNode'
)
);
这使$treeNodeA能够在保存$treeNodeB时隐式保存
$treeNodeA->parentNode = $parentNode;
不幸的是,没有保存引用$treeNodeA作为parentNode的$treeNodeB。也不会返回错误消息,只返回“true”。在您链接的文档示例中,他们将
$robotPart
对象分配给$robot->robotPart
robotPart
指的是链接的robotPart对象,而不是您试图分配对象的ID
您应该在此处使用parentNode
,因为这是您通过hasOne
为您的关系指定的名称
我自己还没有测试过,但是通过遵循文档的逻辑,这应该会将您推向正确的方向
改变你的关系模型,这样你就有了关系的两面
// let Phalcon know that "tree_parent_node_id" is a reference to "node_id"
$this->hasOne(
'tree_parent_node_id', // your column
'TreeNodes', // referenced table
'node_id', // referenced table column
array(
'alias' => 'parentNode',
'foreignKey' => true
)
);
// let Phalcon know that "node_id" is being referenced as a FK in "TreeNodes"
$this->belongsTo(
'node_id', // PK
'TreeNodes', // referenced table
'tree_parent_node_id', // referenced table column
array('foreignKey' => ['message' => 'FK constraint error between node_id and tree_parent_node_id'])
);
在链接的文档示例中,它们将
$robotPart
对象指定给$robot->robotPart
robotPart
指的是链接的robotPart对象,而不是您试图分配对象的ID
您应该在此处使用parentNode
,因为这是您通过hasOne
为您的关系指定的名称
我自己还没有测试过,但是通过遵循文档的逻辑,这应该会将您推向正确的方向
改变你的关系模型,这样你就有了关系的两面
// let Phalcon know that "tree_parent_node_id" is a reference to "node_id"
$this->hasOne(
'tree_parent_node_id', // your column
'TreeNodes', // referenced table
'node_id', // referenced table column
array(
'alias' => 'parentNode',
'foreignKey' => true
)
);
// let Phalcon know that "node_id" is being referenced as a FK in "TreeNodes"
$this->belongsTo(
'node_id', // PK
'TreeNodes', // referenced table
'tree_parent_node_id', // referenced table column
array('foreignKey' => ['message' => 'FK constraint error between node_id and tree_parent_node_id'])
);
提摩太又来营救了!我已经试过了。我现在设法从中得到了错误:
protected$\u message=>string(31)“需要树\父\节点\ id”
。很遗憾,他们没有展示他们为Robot和RobotPartI创建的模型和别名。我看到你没有特别告诉Phalcon你与parentNode
的关系是通过“外键”连接的,尝试在与'alias'=>'parentNode'
相同的数组中添加'foreignKey'=>true
,更新问题并尝试使用外键标志。它确实改变了行为,现在在尝试保存$TestNode时,引用的表上不存在字段“tree\u parent\u node\u id”的消息值。现在您将belongsTo
与hasOne
混淆了。我现在正在玩这些。您在那里给我的配置总是给我错误“节点\u id和树\u父节点\u id之间的FK约束错误”。我在玩弄它,看看我能不能找到正确的设置,然后再去救援!我已经试过了。我现在设法从中得到了错误:protected$\u message=>string(31)“需要树\父\节点\ id”
。很遗憾,他们没有展示他们为Robot和RobotPartI创建的模型和别名。我看到你没有特别告诉Phalcon你与parentNode
的关系是通过“外键”连接的,尝试在与'alias'=>'parentNode'
相同的数组中添加'foreignKey'=>true
,更新问题并尝试使用外键标志。它确实改变了行为,现在在尝试保存$TestNode时,引用的表上不存在字段“tree\u parent\u node\u id”的消息值。现在您将belongsTo
与hasOne
混淆了。我现在正在玩这些。您在那里给我的配置总是给我错误“节点\u id和树\u父节点\u id之间的FK约束错误”。我在玩它,看看我是否能得到正确的设置我更新了我的答案!在您的目录中,您将字段
切换为引用字段
(tree\u parent\u node\u id
与node\u id
),我更新了我的答案!在目录中,您将字段
与引用字段
(树\u父节点\u id
与节点\u id
)