2018-07-20 16:42:20 1800次浏览 1条回答 2 悬赏 10 金钱

Yii2 的话有两个问题一直不太明白,还望大牛们不吝赐教 。

  1. 数据的统一返回处理 。
    我现在的处理是每个模型写 fields 方法,
    但是这个规则 只有 findOnefindAll 有用 ,find()->where()这种就不行 。 是不是我理解的不对? 你们都是怎么做的?
    如有一个模型A 里面有 public function fields(){ return ["id"] ; }
    A::findOne() 返回的结果中只有id ,是想要的。
    A::find() 返回的是所有字段,不是想要的。

  2. 每次查询都带上一个固定的条件 。 需求是这样,表B中的所有数据是通过 user_id 来区分数据是哪个用户的,每次查询的时候都需要带上 user_id 这个条件,但是每个方法里面都写一下很累赘,有没有好的方法?

最佳答案

  • ╃巡洋艦㊣ 发布于 2018-07-20 17:13 举报

    两个问题有同一个解决方法:
    模型类 A:

    public static function find()
    {
        return new AQuery(get_called_class());
    }
    

    AQuery:

    class AQuery extends \yii\db\ActiveQuery
    {
        public function customSelect()
        {
            return $this->select(['id', 'name']);
        }
    
        public function findByUser()
        {
            return $this->andWhere(['user_id' => \Yii::$app->user->id]);
        }
    }
    

    使用方法:

    $model = A::find()->customSelect()->findByUser()->all();
    $model = A::find()->customSelect()->findByUser()->andWhere(...)->one();
    
    觉得很赞
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
wlz
职场新人

wlz

注册时间:2018-05-03
最后登录:2019-01-08
在线时长:4小时11分
  • 粉丝0
  • 金钱10
  • 威望0
  • 积分50

热门问题