Есть ли что-то вроде "has_one: through (из Rails)" в Yii Framework? - PullRequest
2 голосов
/ 30 января 2011

У меня были следующие таблицы:

manufacturers
* id
* name
* description

types
* id
* name
* description
* manufacturer_id

cars
* id
* title
* description
* type_id

Теперь моя проблема в том, что я хочу перечислить автомобили с типами и производителями, например:

* Some Car, Fiat Punto
* Another Car, Ferrari F1

...

В рельсах я могу установить отношение производителя с помощью sth.как это:

class Car < ActiveRecord::Base
  belongs_to :type
  has_one :manufacturer, :through => :type
end

Возможно ли это в Yii?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2011

Начиная с Yii 1.1.7 (я полагаю), в реляционной активной записи теперь существует сквозная поддержка. http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through

2 голосов
/ 30 января 2011

Вы должны использовать функцию "отношения", чтобы достигать подобных вещей. Лучшей представленной страницей будет страница об ActiveRecord, которую вы можете найти здесь .

Поскольку отношения между автомобилями один-ко-многим, типом будет "HAS_MANY".

Например (при условии, что у вас есть модель автомобиля и производителя):

Автомобиль:

public function relations()
{
   return array('manufacturer' => array(self::BELONGS_TO, 'Manufacturer', 'manufacturerId'));
}

Производитель:

public function relations()
{
   return array('cars' => array(self::HAS_MANY, 'Car', 'manufacturerId'));
}

Затем вы можете получить массив автомобилей для производителя через:

foreach($oManufacturer->cars as $oManufacturer)
   echo $oManufacturer->name;

Для автомобиля:

    echo $oCar->manufacturer->name;

Предполагается, что в обеих таблицах указан идентификатор изготовителя. Надеюсь, это поможет:)

edit: Вы не обязаны определять отношения в обеих моделях. Если, например, вам не нужен производитель из автомобиля, тогда совершенно нормально не определять там функцию отношений.

...