Yiiのwhereメソッド使用大全

4270 ワード

PHP技師ははっきり言ってCURD技師で、した仕事は各種の業務のCURDにほかならなくて、各種のwhereの使用を掌握して、MMは二度と私のプログラムが攻撃されることを心配する必要はありません~
Yiiの中で、whereの方法を使うのはとても频繁で、その上whereの方法自身の使用の技巧は比较的に多くて、ここで私はいくつかよく使うことを整理して、后で仕事の中でいつでも调べる需要に便利で、この文を调べるあなたを助けることができることを望んで、各位の补充を歓迎して、不足な点は指摘したいです!
やはりジェーンから深く入りましょう.ps:ここのデータテーブルはシミュレーションされています.
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'
])
の2つのプログラムは 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'
])
の2つのプログラムは 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%'
LIKEの複雑な使い方はINを参考にしてください.似ています.
これらをまとめておきましょう、他にも思いもよらなかった~
谁が転載して私の出所を書かないで、息子を生んで屁の目がありません~
オリジナルアドレス:http://blog.csdn.net/liruxing1715/article/details/48575025