В 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')
Подробную грамматику можно увидеть в официальных документах.