Yii2 ActiveRecord:复合IN条件

时间:2016-08-31 08:32:08

标签: sql activerecord yii2

当使用ActiveRecord的(id, name) in ((1, 'George'), (2, 'Tom'))条件时,如何编写像where()这样的复合IN条件?

2 个答案:

答案 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();