2013-11-30 5 views
1

Привет, у меня есть эти две таблицы, которые я хочу объединить, используя отношения в Yii. Проблема заключается в том, что мне трудно понять, как работает отношение Yii.Yii, соединяющий две таблицы, используя отношения в модели

picturepost 
    id 
    title 
    link_stat_id 

linkstat 
    id 
    link 
    post_count 

У меня также есть рабочий SQL-запрос. Это запрос, я хочу, чтобы мое отношение к результату поиска, когда я, когда я хочу, чтобы получить picturepost

SELECT picturepost.id, picturepost.title,linkstat.post_count 
FROM picturepost 
RIGHT JOIN linkstat 
ON picturepost.link_stat_id=linkstat.link; 

Я хочу что-то вроде этого, когда я ищу пост.

$post = PicturePost::model() -> findByPk($id); 
echo $post->linkCount; 

Вот мой стол для дополнительной информации:

CREATE TABLE IF NOT EXISTS `picturepost` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `title` text COLLATE utf8_unicode_ci DEFAULT NULL, 
    `link_stat_id` char(64) COLLATE utf8_unicode_ci NOT NULL 
) ENGINE=MyISAM; 
CREATE TABLE IF NOT EXISTS `linkstat` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `link` char(64) COLLATE utf8_unicode_ci NOT NULL, 
    `post_count` int(11) DEFAULT '0', 
    PRIMARY KEY (`id`), 
    KEY `post_count` (`post_count`), 
    KEY `link_stat_id` (`link`) 
) ENGINE=InnoDB; 

Заранее спасибо, я надеюсь, что я объяснил это ясно.

ответ

0

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

Простейшей отправной точкой будет создание ограничений внешнего ключа в базе данных, затем с помощью инструмента Gii для генерации кода для модели, в данном случае для таблицы picturepost.

Это должно привести к классу Picturepost с методом отношений(),

class Picturepost extends { 

public function relations() 
{ 
    return array(
    'picturepost_linkstats' => array(self::HAS_MANY, 
           'linkstat', 'link_stat_id'), 
    ); 
} 

Это связывает 2 таблицы с помощью * link_stat_id * поле в качестве внешнего ключа (для первичного ключа связанной таблицы) ,

Когда вы запрашиваете столпик таблицы, вы можете автоматически вставлять записи linkstat.

// Get the picturepost entry 
$picturepost = PicturePost::model()->findByPk(1); 

// picturepost_linkstats is the relationship name 
$linkstats_records = $picturepost->picturepost_linkstats; 
+0

Все еще запутано, как подключить его с помощью внешнего ключа. ** link_stat_id ** должен быть первичным ключом? – tiltdown

+0

picturepost.link_stat_id - FOREIGN KEY, который отображает tolinkstat.id, который является ПЕРВИЧНЫМ КЛЮЧОМ. Что именно вас смущает? Я предоставил код для создания связей и запросил родительскую и дочернюю записи. Есть ли что-то еще, чего вы ожидали? – crafter

+0

picturepost.link_stat_id = linkstat.link, а linkstat.id - столбец auto_increment - моя структура таблицы неправильная? – tiltdown

0
public function relations() 
{ 
    return array(
    'linkstat' => array(self::HAS_ONE, 'Linkstat', array('link_stat_id'=>'link')), 
    ); 
} 

Подробнее о yii relations.

Предполагается, что у вас есть активная модель записи Linkstat, которая представляет данные в таблице linkstat.

Смежные вопросы