I've seen this problem elsewhere on the forums, but can't seem to get any of the solutions to work in my situation and was hoping for some personalized help.
I've got two tables in my DB: an Articles table, and a Versions table. Whenever an article is saved, it should log a new row in the Versions table. I'm able to save to the Article table just fine, but the new version is never added, and my error log says "No foreign key definition for parentClass: Article using relation alias: Version".
Here's the XML schema I used to build my model:
<?xml version="1.0" encoding="UTF-8"?>
<model package="myArticles" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
<object class="Article" table="custom_article" extends="xPDOObject">
<field key="article_id" dbtype="int" precision="10" phptype="integer" null="false" index="pk" generated="native" />
<field key="title" dbtype="varchar" precision="256" phptype="string" null="false" />
<field key="subtitle" dbtype="varchar" precision="512" phptype="string" null="true" />
<field key="summary" dbtype="varchar" precision="512" phptype="string" null="false" />
<field key="published" dbtype="int" precision="1" phptype="integer" null="false" />
<field key="ku_elevated" dbtype="int" precision="1" phptype="integer" null="false" />
<field key="start_time" dbtype="int" precision="32" phptype="integer" null="false" />
<field key="end_time" dbtype="int" precision="32" phptype="integer" null="false" />
<field key="created_userid" dbtype="int" precision="4" phptype="integer" null="false" />
<field key="created_timestamp" dbtype="int" precision="32" phptype="integer" null="false" />
<composite alias="Versions" class="Version" local="article_id" foreign="article" cardinality="many" owner="local" />
</object>
<object class="Version" table="custom_version" extends="xPDOObject">
<field key="version_id" dbtype="int" precision="10" phptype="integer" null="false" index="pk" generated="native" />
<field key="article" dbtype="int" precision="10" phptype="integer" null="true" />
<field key="version_content" dbtype="mediumtext" phptype="string" null="true" />
<field key="version_userid" dbtype="int" precision="4" phptype="integer" null="false" />
<field key="version_timestamp" dbtype="int" precision="32" phptype="integer" null="false" />
<aggregate alias="VersionArticles" class="Article" local="article" foreign="article_id" cardinality="one" owner="foreign" />
</object></model>
I'm using this script as a Formit hook to do the actual saving:
<?php
$title = $hook->getValue('title');
$article_id = $hook->getValue('article_id');
$path = MODX_CORE_PATH . 'components/myArticles/';
$result = $modx->addPackage('myArticles',$path . 'model/','modx_');
$article = $modx->getObject('Article',array(
'article_id' => $article_id,
));
if ($article == null) {
$article = $modx->newObject('Article',array(
'title' => $title,
'created_timestamp' => time(),
'created_userid' => 555
));
$version = $modx->newObject('Version');
$version->set('version_content','blah blah blah');
$article->addOne($version);
}
else {
$article->set('title',$title);
}
$article->save();
return true;
At the moment, you'll see I've just hard-coded some values to try to get it working. Can anyone spot the problem, or possibly a typo? I can provide any other schema or PHP examples you need. Thanks!