我试图在单个事务中保存对新对象的引用,如“隐式事务”下的文档中所示:
我正在创建同一类的两个新对象,然后一个引用另一个。从文档中,保存 TreeNodeB 时应在 TreeNodeA 上执行保存,并将 ID 传递给TreeNodeB->parent_tree_node_id
这似乎不起作用,并且它仍然作为对象传递,因为我在保存功能上遇到错误:
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。也没有返回错误消息,只是“真”。