Рубрики
Uncategorized

Yii многостабильная ассоциация

Автор оригинала: David Wong.

В Yii удобной функцией для работы с базой данных является объединение нескольких таблиц. модель Он определяет связь с таблицей, чтобы вы могли быстро получить соответствующую информацию без необходимости самостоятельно записывать сложную информацию. sql Предложение.

А теперь давайте возьмем его. пользователь Таблица и новости Примеры таблиц. (Пользователь опубликовал несколько статей) Во-первых, нам нужно то, что нам нужно. модель Внутренняя конфигурация отношение : Модель пользователя :

public function relations()
{
  return array(
     'news' => array(self::HAS_MANY, 'News', 'uid', 'order'=>'nid DESC'),
  );
}

оставайтесь новости У нас есть один в таблице. uid Поля соответствуют пользователю Таблице первичному ключу ( uid Потому что uid да пользователь Индекс таблицы, поэтому достаточно указать новости Поля в таблице.

Когда нам нужно указать другие поля, мы можем написать следующее:

'news' => array(self::HAS_MANY, 'News', array('uid'=>'user_id') ),
// This is where the field uid in the news table corresponds to user_id in the user table

Мы выполняем следующий код, чтобы увидеть эффект:

$user = User::app()->model()->fingByPk( $uid );
printr( $user );

Тот, который мы достали $пользователь Там будет новости Информация:

$allnews  = $user->news;
foreach( $allnews as $new ) {
    printr( $new );
}

Это завершает простую связь между двумя таблицами. Как мы можем видеть в приведенном выше примере self::HAS_MANY В Yii есть несколько других отношений по этому поводу:

HAS_ONE//One-to-One
HAS_MANY//One-to-Many
BELONGS_TO//many-to-one
MANY_TO_MANY//Many-to-Many

оставайтесь Новостная модель Мы также можем указать такую. отношение : Новостная модель :

public function relations()
{
  return array(
     'user' => array(self::BELONGS_TO, 'User', 'uid'),
  );
}

Тот, который мы достали новости Каждый из них придет вместе с ним. Пользователь Данные, просты в эксплуатации.

$allnews  = News::app()->model()->findAll();
foreach( $allnews as $new ) {
    printr( $new->user );
}

Два других случая продемонстрированы не будут, тот же принцип. В приведенном выше примере мы видим, что в предыдущем есть один. Параметр order , а второй-нет. Это понятно. Это равносильно нам. sql Условия в операторах. Общими условиями являются:

условие |/заказ |/с тип соединения |/выбор | параметры |/вкл | псевдоним | вместе | группа | наличие | индекс

Также используется для ленивой загрузки :

Limit // Take only 5 or 10 
offset 
through

Официальное Руководство:

'posts'=>array(self::HAS_MANY, 'post', 'author_id', 'order'=>'posts.create_time DESC', 'with'=>'categories')

Подробную грамматику можно увидеть в официальных документах.