Domanda

Ho iniziato a costruire un sistema POS in Doctrine. Sto ricevendo un ordine, ma non ho idea se ho nemmeno impostato sottoclassi nel modo corretto per Dottrina.

Ecco il modello che ho ideato per gli elementi pubblicitari di un ordine

lineItem: line_total, order_id, type
rentLineItem: returned_date_time, item_id, sold
buyLineItem: item_id

Il database ha questo aspetto. Il tipo è 1 (affitto) o 2 (acquisto)

Ecco la classe lineItem

class lineItem extends Doctrine_Record
{
  public function setTableDefinition()
  {
    $this->hasColumn('line_total','int');
    $this->hasColumn('order_id','int');

    $this->setSubclasses(array(
        'rentLineItem' => array('type' => 1),
        'buyLineItem' => array('type' => 2),
      )
    );
  }

  public function setUp()
  {
    $this->hasOne('order', array('local' => 'order_id', 'foreign' => 'id'));
  }
}

Ecco la classe rentLineItem (buyLineItem è simile)

class rentLineItem extends lineItem
{
  public function setTableDefinition()
  {
    $this->hasColumn('returned_date_time','datetime');
    $this->hasColumn('sold','tinyint', 2); // just in case it is sold at the end of the rental
    $this->hasColumn('item_id','int');
  }

  public function setUp()
  {
    $this->hasOne('item', array('local' => 'item_id', 'foreign' => 'id'));
}
}

Ecco il codice che ho chiamato gli oggetti

$q = Doctrine_Query::create()
->select('*')
->from('order')
->where('DATE(creation_date_time) = \'' . $theDate . '\'');

$orders = $q->execute();

$totalRents = 0;
$totalSales = 0;

foreach ($orders as $order) {
  foreach ($order->line_items as $lineItem) {
    if ($lineItem->type == 1) {
      $totalRents++;
    } else if ($lineItem->type == 2) {
      $totalSales++;
    }
  }
}

Ecco l'errore che sto ricevendo

Fatal error: Uncaught exception 'Doctrine_Record_UnknownPropertyException' with message 'Unknown record property / related component "type" on "lineItem"' in 
/Developer/Projects/VEL/lib/vendor/doctrine/Doctrine/Record/Filter/Standard.php:55 Stack trace: #0 
/Developer/Projects/VEL/lib/vendor/doctrine/Doctrine/Record.php(1296): Doctrine_Record_Filter_Standard->filterGet(Object(lLineItem), 'type') #1 
/Developer/Projects/VEL/lib/vendor/doctrine/Doctrine/Record.php(1255): Doctrine_Record->_get('type', true) #2 
/Developer/Projects/VEL/lib/vendor/doctrine/Doctrine/Access.php(72): Doctrine_Record->get('type') #3 
/Developer/Projects/VEL/manage/manage/dailyincomeexpensereport.php(29): Doctrine_Access->__get('type') #4 {main} thrown in 
/Developer/Projects/VEL/lib/vendor/doctrine/Doctrine/Record/Filter/Standard.php on line 55
È stato utile?

Soluzione

Aggiungi un $ this- > hasColumn ('type', 'int'); sopra la chiamata della sottoclasse. Devi dichiarare la colonna prima di usarla per la sottoclasse.

Inoltre, nella sottoclasse chiamate setTableDefinition, aggiungi un parent :: setTableDefinition (); dichiarazione in alto. Fai lo stesso con i metodi setUp (). Potrebbe risolvere il problema o meno, ma ciò potrebbe causare problemi in futuro. Per quanto riguarda ciò a cui ti riferisci, quando Doctrine idrata le raccolte di relazioni, l'ultima volta che ho usato l'ereditarietà dell'aggregazione delle colonne ha fatto la stessa cosa per me ... Potrebbe semplicemente non essere supportato a meno che non stia eseguendo una query direttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top