Я правильно делаю подклассы Doctrine? Почему ошибка?

0

Я начал создавать POS-систему в Doctrine. Я получаю заказ, но я не знаю, действительно ли я настроил подклассы надлежащим образом для Doctrine.

Вот модель, которую я придумал для позиций по заказу

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

База данных выглядит так. Тип - это 1 (аренда) или 2 (купить)

Вот класс 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'));
  }
}

Вот класс rentLineItem (buyLineItem выглядит похожим)

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

Вот код, который я вызываю для объектов

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

Вот ошибка, которую я получаю

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
Теги:
doctrine
subclass

1 ответ

1
Лучший ответ

Добавьте $this- > hasColumn ('type', 'int'); над вашим вызовом подкласса. Вы должны сначала объявить столбец, прежде чем использовать его для подкласса.

Кроме того, в ваших подклассах setTableDefinition добавьте parent:: setTableDefinition(); в верхней части. Также сделайте то же самое с методами setUp(). Это может или не может решить вашу проблему, но это может вызвать проблемы в будущем. Что касается того, о чем вы говорите, когда Doctrine увлажняет коллекции отношений, последний раз, когда я использовал наследование агрегации столбцов, он сделал то же самое для меня... Это может просто не поддерживаться, если вы не запрашиваете напрямую.

  • 0
    Я делаю это ... и он избавляется от этой ошибки, но когда я вызываю класс в своем коде для получения позиций, он не распознает его как rentLineItem или buyLineItem, просто как lineItem
  • 0
    Смотрите выше ... извините, я не могу помочь больше ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню