イム「暗黙の取引」の下で単一のトランザクションas shown here in the documentationに新しいオブジェクトへの参照を保存しようとする際に新しいレコードへの参照を保存しますもう一方を参照しています。ドキュメントから、TreeNodeBが保存され、IDがTreeNodeB->parent_tree_node_id
に渡されるときに保存が実行される必要があります。Phalconは:</p> <p>私は同じクラスの2つの新しいオブジェクトを作成しています、1:1つのトランザクション
これは機能していないように見えますが、機能:
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はのparentNodeを認識しています。
$this->belongsTo(
'tree_parent_node_id',
'TreeNodes',
'node_id',
array(
'alias' => 'parentNode'
)
);
これにより、$ treeNodeBが保存されるときに$ treeNodeAが暗黙的に保存されるようになります。
$treeNodeA->parentNode = $parentNode;
残念ながら、parentNodeとして$ treeNodeAを参照する$ treeNodeBは保存されません。どちらのエラーメッセージも返されず、単に 'true'になります。
の両側を持っているので!あなたの 'belongsTo'では'参照されたフィールド '(' tree_parent_node_id'と 'node_id')であなたの' field'を切り替えました – Timothy