当使用ActiveRecord的(id, name) in ((1, 'George'), (2, 'Tom'))
条件时,如何编写像where()
这样的复合IN条件?
答案 0 :(得分:4)
要创建复合IN条件,您可以使用和数组作为列名称和值,其中值由列名称索引:
for ($i=0;$i<$er->GetInboxCount();$i++) { // fromaddress, date, subject are from imap_headerinfo echo br.br; echo "<h3>Message received from: </h3>" . $er->GetMessage($i)["header"]['fromaddress']; echo br.br; echo "<h3>Message received on: </h3>" . $er->GetMessage($i)["header"]['date']; echo br.br; echo "<h3>Subject: </h3>" . $er->GetMessage($i)["header"]['subject']; echo br.br; echo "<h3>Message in text format:</h3>" . $er->GetMessage($i)['body_text']; echo br.br; echo "<h3>Message in html format: </h3>" . $er->GetMessage($i)['body_html'];
。
e.g。 :
['in', ['id', 'name'], [['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']]]
详细了解ActiveQuery::where()。
答案 1 :(得分:2)
您可以使用in
方法中的where()
条件:
in:操作数1应该是列或DB表达式。操作数2可以 数组或Query对象。它将生成IN条件。 如果操作数2是一个数组,它将代表值的范围 列或DB表达式应该是;如果操作数2是查询 对象,将生成一个子查询并用作范围 列或DB表达式。例如,['in','id',[1,2,3]]将会 生成id IN(1,2,3)。该方法将正确引用该列 范围中的名称和转义值。 in运营商也支持 复合柱。在这种情况下,操作数1应该是一个数组 列,而操作数2应该是数组或查询数组 表示列范围的对象。
http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html#hash-format
示例:
Model::find()->where(['in', 'id', [1,2]])->all();