views:

676

answers:

2

I am getting following error message:

Doctrine_Table_Exception: Unknown relation alias shoesTable in /home/public_html/projects/giftshoes/system/database/doctrine/Doctrine/Relation/Parser.php on line 237

I am using doctrine 1.2.2 with Codeigniter

My Code is below: (BaseShoes.php and Shoes.php is auto generated)

------------BaseShoes------------

<?php
// Connection Component Binding
Doctrine_Manager::getInstance()->bindComponent('Shoes', 'sadiqsof_giftshoes');

/**
 * BaseShoes
 * 
 * This class has been auto-generated by the Doctrine ORM Framework
 * 
 * @property integer $sku
 * @property string $name
 * @property string $keywords
 * @property string $description
 * @property string $manufacturer
 * @property float $sale_price
 * @property float $price
 * @property string $url
 * @property string $image
 * @property string $category
 * @property Doctrine_Collection $Viewes
 * 
 * @package    ##PACKAGE##
 * @subpackage ##SUBPACKAGE##
 * @author     ##NAME## <##EMAIL##>
 * @version    SVN: $Id: Builder.php 6820 2009-11-30 17:27:49Z jwage $
 */
abstract class BaseShoes extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->setTableName('shoes');
        $this->hasColumn('sku', 'integer', 4, array(
             'type' => 'integer',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => true,
             'autoincrement' => false,
             'length' => '4',
             ));
        $this->hasColumn('name', 'string', 255, array(
             'type' => 'string',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '255',
             ));
        $this->hasColumn('keywords', 'string', 255, array(
             'type' => 'string',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '255',
             ));
        $this->hasColumn('description', 'string', null, array(
             'type' => 'string',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '',
             ));
        $this->hasColumn('manufacturer', 'string', 20, array(
             'type' => 'string',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '20',
             ));
        $this->hasColumn('sale_price', 'float', null, array(
             'type' => 'float',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '',
             ));
        $this->hasColumn('price', 'float', null, array(
             'type' => 'float',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '',
             ));
        $this->hasColumn('url', 'string', null, array(
             'type' => 'string',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '',
             ));
        $this->hasColumn('image', 'string', null, array(
             'type' => 'string',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '',
             ));
        $this->hasColumn('category', 'string', 50, array(
             'type' => 'string',
             'fixed' => 0,
             'unsigned' => false,
             'primary' => false,
             'notnull' => true,
             'autoincrement' => false,
             'length' => '50',
             ));
    }

    public function setUp()
    {
        parent::setUp();
        $this->hasMany('Viewes', array(
             'local' => 'sku',
             'foreign' => 'sku'));
    }
}

--------------ShoesTable--------

<?php
class ShoesTable extends Doctrine_Table
{
    function getAllShoes($from = 0, $total = 15)
    {
        $q = Doctrine_Query::create()
        ->from('Shoes')
        ->limit($total)
        ->offset($from);

        return $q->execute(array(), Doctrine::HYDRATE_ARRAY);
    }

}

---------------Shoes Model-----------------

<?php

/**
 * Shoes
 * 
 * This class has been auto-generated by the Doctrine ORM Framework
 * 
 * @package    ##PACKAGE##
 * @subpackage ##SUBPACKAGE##
 * @author     ##NAME## <##EMAIL##>
 * @version    SVN: $Id: Builder.php 6820 2009-11-30 17:27:49Z jwage $
 */
class Shoes extends BaseShoes
{
    function  __construct() {
        parent::__construct();
        $this->shoesTable = Doctrine::getTable('Shoes');
    }

    function getAllShoes()
    {
        return $this->shoesTable->getAllShoes();
    }

}
A: 

Not sure why you get this specific error, but, judging from Doctrine's manual, you should not define the __construct() method in your Shoes class (that extends BaseShoes, which, itself, extends Doctrine_Record)

Here's the section of Doctrine's manual that says just this : Overriding the Constructor (quoting) :

Doctrine doesn't allow you to override the Doctrine_Record::__construct() method but provides an alternative
[...]

(I didn't copy-paste everything : there is more interesting stuff there ;-) )

Pascal MARTIN
I also tried removing __construct but did not work. you can see the error at http://apps.facebook.com/giftshoes/
Sadiqur Rahman
A: 

Removing the constructor without doing something with the code you've removed probably won't help.

I am new to Doctrine, but I'd had the same error recently (I think for different reasons). I wonder if the class attribute $this->shoesTable is taken to mean a foreign relation, which would explain the error message. In any case, you probably don't want to have a table method in a row class, so I would be inclined to do this:

Doctrine_Core::getTable('Shoes')->getAllShoes();

I know it's unlikely you're still awaiting this, but if you want to continue the dialogue, post your calling code.

halfer