Как мне изменить модель, чтобы она возвращала определенные поля БД? - PullRequest
0 голосов
/ 14 сентября 2011

Вопрос Yii:

Ситуация:
Я сгенерировал модель, используя инструмент Yii для генерации кода gii. Модель возвращает все поля в данной таблице в базе данных MySQL.

Проблема:
Я хочу вернуть только поля, относящиеся к конкретному вошедшему в систему пользователю, на основе его идентификатора пользователя (который я получаю из Yii::app()->user->getId())

Вопрос:
Как я могу изменить мою модель, чтобы сделать это?

Код:
( Раздел «Правила» моего класса Model )

public function rules()
{
   return array(
   array('user_id, title, description', 'required'),
   array('user_id', 'numerical', 'integerOnly'=>true),
   array('description', 'length', 'max'=>255),
   array('id, user_id, title', 'safe', 'on'=>'search'),

   // Is the solution something like this?
   //array('user_id', 'compare', 'user_id'=>Yii::app()->user->getId());
  );
}

1 Ответ

1 голос
/ 14 сентября 2011

Вам не нужно изменять модель - как вы делаете поиск? Если вы хотите использовать Active Record, вы можете сделать что-то вроде:

User::model()->find(array('condition'=>'user_id='.Yii::app()->user->getId()));

если идентификатор пользователя является первичным ключом, то:

User::model()->findByPk(Yii::app()->user->getId());

и если вы действительно хотите добавить условие в модель, вы, вероятно, захотите использовать scope для определения условия поиска, правила для проверки данных, когда они передаются для вставки / обновления. *

Для областей применения поместите эту функцию в вашу модель:

public function scopes() {
    return array(
        'userid'=>array(
            'condition' => 't.user_id = ' . Yii::app()->user->getId(),
        ),
    );
}

тогда вы можете использовать что-то вроде этого для извлечения данных:

User::model()->userid()->find();

(В приведенном выше слове измените «User» на название вашей модели.)

Я настоятельно рекомендую вам прочесть документацию по БД и пройти некоторые уроки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...