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