yii2 数据库常见查询

User::find()->all();    此方法返回所有数据;

User::findOne($id);   此方法返回 主键 id=1  的一条数据(举个例子); 

User::find()->where(['name' => '小伙儿'])->one();   此方法返回 ['name' => '小伙儿'] 的一条数据;

User::find()->where(['name' => '小伙儿'])->all();   此方法返回 ['name' => '小伙儿'] 的所有数据;

User::find()->orderBy('id DESC')->all();   此方法是排序查询;

User::findBySql('SELECT * FROM user')->all();  此方法是用 sql  语句查询 user 表里面的所有数据;

User::findBySql('SELECT * FROM user')->one();  此方法是用 sql  语句查询 user 表里面的一条数据;

User::find()->andWhere(['sex' => '男', 'age' => '24'])->count('id');   统计符合条件的总条数;

User::find()->andFilterWhere(['like', 'name', '小伙儿']); 此方法是用 like 查询 name 等于 小伙儿的 数据

User::find()->one();    此方法返回一条数据;

User::find()->all();    此方法返回所有数据;

User::find()->count();    此方法返回记录的数量;

User::find()->average();    此方法返回指定列的平均值;

User::find()->min();    此方法返回指定列的最小值 ;

User::find()->max();    此方法返回指定列的最大值 ;

User::find()->scalar();    此方法返回值的第一行第一列的查询结果;

User::find()->column();    此方法返回查询结果中的第一列的值;

User::find()->exists();    此方法返回一个值指示是否包含查询结果的数据行;

User::find()->batch(10);  每次取 10 条数据 

User::find()->each(10);  每次取 10 条数据, 迭代查询

1.简单的赋值

->where("id=:id", [  
    ':id' => 1  
])  

上面的程式等同于 id=1

2.AND查询

->where("id=:id and pack_name=:pack_name", [  
    ':id' => 1,  
    ':pack_name' => 'com.famigo.sandbox'  
])  

或者

->where([  
    'and',  
    'id=:id',  
    'pack_name=:pack_name'  
], [  
    ':id' => 1,  
    ':pack_name' => 'com.famigo.sandbox'  
])  

这两种程式等同于 id=1 AND pack_name='com.famigo.sandbox'

3.OR查询

->where("id=:id or pack_name=:pack_name", [  
    ':id' => 1,  
    ':pack_name' => 'com.famigo.sandbox'  
])  

或者

->where([  
    'or',  
    'id=:id',  
    'pack_name=:pack_name'  
], [  
    ':id' => 1,  
    ':pack_name' => 'com.famigo.sandbox'  
])  

这两种程式等同于 id=1 OR pack_name='com.famigo.sandbox'

4.AND OR 混合查询

->where([  
    'and',  
    'display=:display',  
    [  
        'or',  
        'id=:id1',  
        'id=:id2'  
    ]  
], [  
    ':display' => 1,  
    ':id1' => 1,  
    ':id2' => 2  
])  

上面的程式等同于(display=1) AND ((id=1) OR (id=2))

5.IN查询

->where([  
    'in', 'id', [1, 3, 5, 6]  
])  

上面程式等同于 id in (1, 3, 5, 6)

->where([  
    'and',  
    'display=:display',  
    'lang=:lang',  
    [  
    'in', 'id', [1, 3, 5, 6]  
    ]  
], [  
    ':display' => 1,  
    ':lang' => 2  
])  

上面程式等同于 (display=1) AND (lang=2) AND (id IN (1, 3, 5, 6))

更为麻烦点的例子

->where([  
    'or',  
    [  
        'and',  
        'display=:display1',  
        [  
        'in', 'id', [1, 3, 5, 6]  
        ]  
    ],  
    [  
        'and',  
        'display=:display2',  
        [  
        'in', 'id', [2, 4, 8, 9]  
        ]  
    ]  
], [  
    ':display1' => 1,  
    ':display2' => 2,  
])  

上面程式等同于((display=1) AND (id IN (1, 3, 5, 6))) OR ((display=2) AND (id IN (2, 4, 8, 9)))

6.NOT IN 查询

->where([  
    'not in', 'id', [1, 2, 4, 3]  
])  

上面程式等同于id NOT IN (1, 2, 4, 3)

复杂的使用方法和上述的IN是一样的,参考即可。

7.LIKE 查询

->where([  
    'like', 'pack_name', '%sandbox%'  
])  

上面程式等同于pack_name LIKE '%sandbox%'

->where([  
    'like', 'pack_name', [  
        '%sandbox%',  
        'com.famigo%'  
    ]  
])  

上面程式等同于pack_name LIKE '%sandbox%' AND pack_name LIKE 'com.famigo%'

->where([  
    'or like', 'pack_name', [  
        '%sandbox%',  
        'com.famigo%'  
    ]  
])  

上面程式等同于pack_name LIKE '%sandbox%' OR pack_name LIKE 'com.famigo%'

->where([  
    'or not like', 'pack_name', [  
        '%sandbox%',  
        'com.famigo%'  
    ]  
])  

上面程式等同于pack_name NOT LIKE '%sandbox%' OR pack_name NOT LIKE 'com.famigo%'

->where([  
    'not like', 'pack_name', [  
        '%sandbox%',  
        'com.famigo%'  
    ]  
])  

上面程式等同于pack_name NOT LIKE '%sandbox%' AND pack_name NOT LIKE 'com.famigo%'

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 7

:kissing_heart:

4年前 评论
OnlyDawn (楼主) 4年前

手好快啊,
一看全是我做过记录的一些使用方法。
哈哈

4年前 评论
OnlyDawn (楼主) 4年前
->where("id=:id", [  
    'id' => 1  
])

应该改成:

->where("id=:id", [  
    ':id' => 1  
])
4年前 评论
OnlyDawn (楼主) 4年前

感谢!正好用到。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!