Doktrin Ölümcül Hata - Bilinmeyen ilişkisi alias

4 Cevap php

Ben şu hata mesajı alıyorum:

Doctrine_Table_Exception: on line in / home / public_html / projects / giftshoes / sistem / veritabanı / doktrin / Doktrini / İlişki / Parser.php Bilinmeyen ilişkisi takma shoesTable 237

Ben Codeigniter ile doktrinini 1.2.2 kullanıyorum

Benim Kod aşağıdadır: (BaseShoes.php ve shoes.php otomatik oluşturulur)

------------ 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);
    }

}

--------------- Ayakkabı Modeli -----------------

<?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();
    }

}

4 Cevap

Ben çünkü herkesten cevap ararken için, ben bu hata mesajı içine koştu

Doctrine_Query::create()->from('Subscription s')->innerJoin('BillingPlan b')

Yerine

Doctrine_Query::create()->from('Subscription s')->innerJoin('s.BillingPlan b')

Ilişkisi gelen listelenen modeline göre olması gerekir ()

Değil bu özel hata alıyorum, ama, Doktrini kılavuzuna bakılırsa, neden, size Shoes sınıfına (that extends BaseShoes olarak __construct() yöntemi tanımlamak gerekir emin ki, kendisi , uzanır Doctrine_Record)

İşte diyor Doktrini el kitabı bölümünde Sadece bu: 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 ;-) )

Sen Ayakkabı nesne üzerinde bir özellik olarak $ shoesTable tanımlı değil. Bu gibi ekleyin:

class Shoes extends BaseShoes
{
    private $shoesTable;

    function  __construct() {
        parent::__construct();
        $this->shoesTable = Doctrine::getTable('Shoes');
    }

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

}

Eğer yoksa, o var, ve Doktrin sağlayan __ get () sihirli yöntemini çağırır başvuran değildir. Doktrin shoesTable veri modelinin bir parçası olduğunu varsayalım ve bu isimde bir ilişki (herhangi bir yerel veri bulamıyor beri) arayacaktır.

Bunu yapmanın başka, daha kolay bir yolu gettable yerleşik () yöntemini kullanmak için:

class Shoes extends BaseShoes
{

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

}

Muhtemelen kaldırdık koduyla şey yapmadan kurucu çıkarmadan yardımcı olmayacaktır.

Doktrin yeni duyuyorum, ama ben (farklı nedenlerle düşünüyorum) yakın zamanda aynı hata olmuştu. Sınıf özniteliği $ this-> shoesTable hata mesajı açıklayabilecek bir yabancı ilişki anlamına alınır merak ediyorum. Her durumda, muhtemelen bir satır sınıfta bir tablo yöntemi var istemiyorum, bu yüzden bunu yapmak için eğimli olacak:

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

Ben hala bu beklemedeyiz olası olduğunu biliyorum, ama diyalog devam etmek istiyorsanız, sizin arama kod sonrası.