yii2 資料庫常見查詢

OnlyDawn發表於2019-06-13
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 協議》,轉載必須註明作者和本文連結

相關文章