Имеет много связей между обеими моделями - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть база данных примерно так

  == Invoices ==
  id
  customer_id

  == Customers ==
  id
  firstname
  lastname
  membersince

Итак, я установил отношения между обеими моделями, как показано ниже.

Определение отношения в модели счетов:

'customers'=>array(self::HAS_MANY,'Invoices','customer_id'),

Определение отношения в модели клиентов

'invoices' => array(self::BELONGS_TO, 'Invoices', 'invoice_id'),

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

1 Ответ

3 голосов
/ 11 февраля 2012

Нет, соотношение между моделями неверное.

Я предполагаю, что вы хотите, чтобы клиенты могли иметь много счетов, но счет может принадлежать только одному клиенту, поскольку это подразумевает схема вашей базы данных.

Обратите внимание, что в приведенном ниже коде я различаю единственную и множественную формы клиента и счета, чтобы сделать код логичным и легким для понимания.

В этом случае определение отношения в модели Invoice будетбыть таким:

class Invoice extends CActiveRecord {
    public function relations() {
        return array(
            'customer' => array(self::BELONGS_TO, 'Customer', 'customer_id')
        );
    }
}

Счет-фактура «принадлежит» клиенту.'Customer' указывает, что типом модели, на которую мы ссылаемся, является Customer, а 'customer_id' - это имя столбца в таблице invoices, который ссылается на первичный ключ клиента.

Модель Customer выглядит немного сложнее:

class Customer extends CActiveRecord {
    public function relations() {
        return array(
            'invoices' => array(self::HAS_MANY, 'Invoice', 
                               'customer_id', 'index' => 'id')
        );
    }
}

Здесь определение отношения указывает, что Customer может относиться ко многим Invoice моделям.Обратите внимание, как определяется остальная часть отношения.customer_id снова является столбцом, который ссылается на Customer, а 'index' => 'id' указывает Yii использовать столбец id в таблице customers в качестве ключа для отношения.

Вы можете найти большеинформация о методе relations в документации Yii .

...