SELECT Product.*, PD.name FROM `opcart_product` AS `Product` JOIN `opcart_product_description` `PD` ON WHERE `PD`.`product_id` == 0 ORDER BY date_added DESC LIMIT 6

$query->toSQL(); returns:
SELECT Product.*, PD.name FROM `opcart_product` AS `Product` JOIN `opcart_product_description` `PD` ON WHERE `PD`.`product_id` == 0 ORDER BY date_added DESC LIMIT 6
There is no output after "ON". I’m not entirely sure how that is determined, but my next best guess is via relationships, because everything after "ON" is pretty messy.
<object class="Product" table="product" extends="xPDOObject"> <field key="product_id" dbtype="int" precision="11" phptype="integer" null="false" index="pk" generated="native" /> <field key="model" dbtype="varchar" precision="64" phptype="string" null="false" /> <field key="sku" dbtype="varchar" precision="64" phptype="string" null="false" /> <field key="location" dbtype="varchar" precision="128" phptype="string" null="false" /> <field key="quantity" dbtype="int" precision="4" phptype="integer" null="false" default="0" /> <field key="stock_status_id" dbtype="int" precision="11" phptype="integer" null="false" /> <field key="image" dbtype="varchar" precision="255" phptype="string" null="true" /> <field key="manufacturer_id" dbtype="int" precision="11" phptype="integer" null="false" /> <field key="shipping" dbtype="int" precision="1" phptype="integer" null="false" default="1" /> <field key="price" dbtype="decimal" precision="15,4" phptype="float" null="false" default="0.0000" /> <field key="tax_class_id" dbtype="int" precision="11" phptype="integer" null="false" /> <field key="date_available" dbtype="date" phptype="date" null="false" /> <field key="weight" dbtype="decimal" precision="5,2" phptype="float" null="false" default="0.00" /> <field key="weight_class_id" dbtype="int" precision="11" phptype="integer" null="false" default="0" /> <field key="length" dbtype="decimal" precision="5,2" phptype="float" null="false" default="0.00" /> <field key="width" dbtype="decimal" precision="5,2" phptype="float" null="false" default="0.00" /> <field key="height" dbtype="decimal" precision="5,2" phptype="float" null="false" default="0.00" /> <field key="length_class_id" dbtype="int" precision="11" phptype="integer" null="false" default="0" /> <field key="status" dbtype="int" precision="1" phptype="integer" null="false" default="0" /> <field key="date_added" dbtype="datetime" phptype="datetime" null="false" default="0000-00-00 00:00:00" /> <field key="date_modified" dbtype="datetime" phptype="datetime" null="false" default="0000-00-00 00:00:00" /> <field key="viewed" dbtype="int" precision="5" phptype="integer" null="false" default="0" /> <field key="sort_order" dbtype="int" precision="11" phptype="integer" null="false" default="0" /> <field key="subtract" dbtype="int" precision="1" phptype="integer" null="false" default="1" /> <field key="minimum" dbtype="int" precision="11" phptype="integer" null="false" default="1" /> <field key="cost" dbtype="decimal" precision="15,4" phptype="float" null="false" default="0.0000" /> <index alias="PRIMARY" name="PRIMARY" primary="true" unique="true" type="BTREE" > <column key="product_id" length="" collation="A" null="false" /> </index> <composite alias="ProductDescription" class="ProductDescription" local="product_id" foreign="product_id" cardinality="many" owner="local" /> </object> <object class="ProductDescription" table="product_description" extends="xPDOObject"> <field key="product_id" dbtype="int" precision="11" phptype="integer" null="false" index="pk" generated="native" /> <field key="language_id" dbtype="int" precision="11" phptype="integer" null="false" index="pk" /> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" index="index" /> <field key="meta_keywords" dbtype="varchar" precision="255" phptype="string" null="false" /> <field key="meta_description" dbtype="varchar" precision="255" phptype="string" null="false" /> <field key="description" dbtype="text" phptype="string" null="false" /> <index alias="PRIMARY" name="PRIMARY" primary="true" unique="true" type="BTREE" > <column key="product_id" length="" collation="A" null="false" /> <column key="language_id" length="" collation="A" null="false" /> </index> <index alias="name" name="name" primary="false" unique="false" type="BTREE" > <column key="name" length="" collation="A" null="false" /> </index> <aggregate alias="Product" class="Product" local="product_id" foreign="product_id" cardinality="one" owner="foreign" /> </object>
<?php
$mtime= microtime();
$mtime= explode(" ", $mtime);
$mtime= $mtime[1] + $mtime[0];
$tstart= $mtime;
//Customize this line based on the location of your script
include_once (strtr(realpath(dirname(__FILE__)) . '/../../xpdo/xpdo.class.php', '\\', '/'));
//note : this database does not have table prefixes
$xpdo= new xPDO('mysql:host=localhost;dbname=THEDATABASENAME','THEDATABASEUSER','THEDATABASEPWD','');
$myPackage = 'exttest'; //A name I picked for testing
// Set the package name and root path of that package
$xpdo->setPackage($myPackage, XPDO_CORE_PATH . '../components/');
$xpdo->setDebug(true);
$manager= $xpdo->getManager();
$generator= $manager->getGenerator();
$sources = array(
'config' => MODX_CORE_PATH . 'config/config.inc.php',
'package' => MODX_CORE_PATH . 'components/' . $myPackage . '/',
'model' => MODX_CORE_PATH. 'components/' . $myPackage . '/model/',
'schema' => MODX_CORE_PATH . 'components/' . $myPackage . '/schema/',
);
if (! file_exists($sources['package'])) {
mkdir($sources['package'],0777);
}
if (! file_exists($sources['model'])) {
mkdir($sources['model'],0777);
}
if (! file_exists($sources['schema'])) {
mkdir($sources['schema'],0777);
}
//Use this to create a schema from an existing database
//Note again - no database table prefix
$xml= $generator->writeSchema($sources['schema'] . $myPackage . '.mysql.schema.xml', $myPackage, 'xPDOObject', '');
//Use this to generate classes and maps from your schema
// NOTE: by default, only maps are overwritten; delete class files if you want to regenerate classes
$generator->parseSchema($sources['schema'] . $myPackage . '.mysql.schema.xml', $sources['model']);
$mtime= microtime();
$mtime= explode(" ", $mtime);
$mtime= $mtime[1] + $mtime[0];
$tend= $mtime;
$totalTime= ($tend - $tstart);
$totalTime= sprintf("%2.4f s", $totalTime);
echo "\nExecution time: {$totalTime}\n";
exit ();
<?php
$dsn = 'mysql:host=localhost;dbname=THEDATABASENAME;';
$xpdo = new xPDO($dsn,'THEDATABASEUSER','THEDATABASEPWD');
//$xpdo->setDebug(true);
$myPackage = 'exttest';
$path = MODX_CORE_PATH . 'components/' . $myPackage . '/';
//note : database does not have table prefixes
$result = $xpdo->addPackage($myPackage,$path. 'model/','');
if (! $result) {
return 'failed to add package';
}
//$query = $xpdo->newQuery('Tracks'); //Tracks is associated with one of the tables. See schema file
//$query->where(array('cd:=' => 3)); //want songs on cd 3
$query = $xpdo->query('SELECT *'); //select all
$songs = $xpdo->getCollection('Tracks',$query); //Tracks is associated with one of the tables. See schema file
$output = '<p>Total: '. count($songs) . '</p>';
foreach($songs as $song) {
$output .= '<p>Title: ' . $song->get('title');
$output .= '<p>Price: ' . $song->get('price');
$output .= '<br />CD: ' . $song->get('cd') . '<br /></p>';
}
return $output;
<?php
$xpdo= new xPDO('mysql:host=localhost;dbname=myDBName','myDBUser','myDBPass','myDBPrefix_');
$manager = $xpdo->getManager();
$generator = $manager->getGenerator();
$generator->parseSchema('ocLatestProducts.mysql.schema.xml','/core/components/ocLatestProducts/model/');