Связь между моделями в Yii - PullRequest
       8

Связь между моделями в Yii

0 голосов
/ 20 февраля 2012

У меня есть такая база данных

+------------------+
|     Invoices     |
+------------------+
| id               |
| customer_id (Fk) |
| description      |
+------------------+

+------------------+
|   InvoiceItems   |
+------------------+
| id               |
| Item_name        |
| price            |
| discount         |
| description      |
+------------------+

+------------------+
|    Customers     |
+------------------+
| id               |
| firstname        |
| lastname         |
| description      |
+------------------+

В соответствии с базой данных я установил отношения в моделях следующим образом.
В модели «Счета-фактуры» отношение выглядит следующим образом

public function relations()
{
 return array(
  'invoiceitem' => array(self::HAS_MANY,'InvoiceItems','invoice_id'),
  'customers'    =>  array(self::BELONGS_TO,'Customer','customer_id'),
 );
}

В модели InvoiceItems отношение выглядит следующим образом

public function relations()
{
 return array(
   'invoice' => array(self::BELONGS_TO,'Invoices','invoice_id'),
 );
}

В модели «Клиенты» отношения такие:

public function relations()
{
  return array(
   'invoice' => array(self::HAS_MANY, 'Invoices','customer_id')
  );
}

Теперь я хочу знать, правильны ли отношения между этими моделями или нет?

1 Ответ

0 голосов
/ 20 февраля 2012

Ваш элемент Invoice не имеет поля invoice_id в описании таблицы.Отношения нуждаются в ссылке на первичный ключ для работы.Поле db, которое вы объявляете в отношении, должно содержать первичный ключ модели, с которой вы работаете.Поэтому, если вы работаете со счетом, отношение HAS_MANY должно быть в состоянии найти идентификатор счета в поле invoice_id элемента.Вы также можете использовать отдельную таблицу для данных отношений и объявить ее следующим образом:

array(self::HAS_MANY,'InvoiceItems',reltable('invoice_id', 'item_id))

Подробнее об отношениях можно прочитать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...