【问题标题】:How do I modify a model to return specific db fields?如何修改模型以返回特定的数据库字段?
【发布时间】:2011-09-14 07:34:27
【问题描述】:

一个 Yii 问题:

情况:
我使用 Yii 的 gii 代码生成器工具生成了一个模型。该模型返回 MySQL 数据库中给定表中的所有字段。

问题:
我只想根据用户 ID(我从 Yii::app()->user->getId() 获得)返回与特定登录用户相关的字段

问题:
我怎样才能修改我的模型来做到这一点?

代码:
我的模型类的“规则”部分

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());
  );
}

【问题讨论】:

  • 我对 yii 一无所知,但在我看来,必须输入一个仅保留所需记录的“位置”条件。所以看看 yii how-where 来应用 where 条件。

标签: php mysql yii


【解决方案1】:

您不需要修改模型 - 您的搜索结果如何?如果你想使用 Active Record,你可以这样做:

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

如果用户 id 是主键,则:

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();

(在上面将“用户”更改为您的模型的名称。)

我强烈建议您阅读 db documentation 并完成一些教程。

【讨论】:

  • 非常感谢您提供如此有用的答案。这就是堆栈溢出很棒的原因。
猜你喜欢
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多