Frage

Ich begann ein POS-System in Lehre zu bauen. Ich erhalte eine Ordnung, aber ich habe keine Ahnung, ob ich auch Subklassen in der richtigen Art und Weise zu Lehre einzurichten.

Hier ist das Modell, das ich mit auf eine Bestellung für Positionen kam

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

Die Datenbank sieht so aus. Typ ist entweder eine 1 (Miete) oder ein 2 (kaufen)

Hier ist die LineItem Klasse

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

Hier ist die rentLineItem Klasse (buyLineItem ähnlich sieht)

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

Hier ist der Code, den ich die Objekte haben Aufruf

$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++;
    }
  }
}

Hier ist der Fehler Ich erhalte

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
War es hilfreich?

Lösung

Fügen Sie einen $ this-> hasColumn ( 'Typ', 'int'); oberhalb der Unterklasse Anruf. Sie haben die Säule zuerst zu erklären, bevor Sie es für Subklassifizieren verwenden.

Auch in der Unterklasse setTableDefinition Anrufe, fügen Sie ein parent :: setTableDefinition (); Anweisung an der Spitze. Auch das gleiche mit dem setUp () Methoden. Es kann oder kann Ihr Problem nicht lösen, aber das kann zu Problemen in der Zukunft führen. Als für das, was Sie sich beziehen, wenn Lehre die Beziehung Sammlungen, die ich das letzte Mal Spalte Aggregation Vererbung es die gleiche Sache zu mir tat verwendet Hydrate ... Es kann einfach nicht unterstützt werden, wenn Sie direkt sind abfragt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top