Модель для мета-таблицы в Yii - PullRequest
1 голос
/ 24 июня 2011

Я только начал разрабатывать свой новый проект в Yii, я новичок в Yii, а также в фреймворках и структуре MVC.

Я бы хотел получить несколько советов по созданию мета-таблиц и модели для этой таблицы.Предположим, мне нравится хранить несколько дескрипторов чата для пользователя.Я создал таблицу для хранения пользовательских данных, таких как user_id, user_name, email .. и другую таблицу, которая является моей мета-таблицей со структурой id, user_id, key, value

Я хотел бы связать эти две таблицы в одной модели, чтобы получить доступ к значению ключа, хранящегося в мета-таблице, например, $ user-> yahoo.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 24 июня 2011

см .: http://www.yiiframework.com/doc/guide/1.1/en/database.arr

Он проведет вас через простой пример, аналогичный тому, что вы хотите сделать.Обратите внимание, что если вы настроите свою базу данных с внешними ключами, инструменты Gii создадут это отношение для вас в вашей модели.Если вы используете MySql, MySqlWorkbench или другие подобные инструменты, которые могут быть полезны для управления внешними ключами, вам просто нужно убедиться, что вы используете таблицы типов InnoDB.

0 голосов
/ 20 января 2012

Просто создайте модель для мета-таблицы, а также первичной таблицы.Тогда, если у вас есть отношение внешнего ключа к этой таблице, вы сможете получить доступ к модели мета-таблицы как свойству первичной таблицы.Чтобы прояснить ситуацию:

Скажем, у нас есть две таблицы:

Customer -id -name -address -name -email

customer_meta -id -customer_id -meta_key -meta_value

вы бы сгенерировали две модели, используя Gii для обеих этих таблиц.Затем, если вы используете таблицы MySQL и InnoDB и создадите внешнее отношение ключа ebtween customer.id -> customer_meta.customer_id, вы сможете получить доступ к метаданным в модели клиента следующим образом:

// this will echo get the first meta value
$model = new customer;
$customer = $model->loadModel( 3 );
echo $customer->customer_meta[0]->meta_value;

// or loop through the meta data
foreach( $customer->customer_meta as $meta ) {

   echo 'Name: '.$meta->meta_key.' Value: '.$meta->meta_key.'<br />';
}
0 голосов
/ 24 июня 2011

использовать геттеры и сеттеры. Определите метод getYahoo и в этом методе выполните поиск по таблице, чтобы получить желаемое значение

...