尝试使用Yii2从纯PHP迁移SQL命令

nod*_*ect 3 mysql yii2

我正在尝试将PHP语句更改为Yii2。这是原始代码:

$sql = "select id from users where member_type='d'";
$max = @mysql_num_rows($r=mysql_query($sql));
for($i=0;$i<$max;$i++){
    $demo2=mysql_fetch_assoc($r);
    some_functions($demo2['id'], 'something');
}
Run Code Online (Sandbox Code Playgroud)

我是Yii2框架的新手,并试图将其转换为Yii2,但不知道如何。我正在模态文件下执行此功能。

这是我最大的能力:

$max= Yii::$app->dbFxprimus->createCommand("select count(id) from ". $this->tableName() ." where member_type='d'")->queryAll();
for($i2=0;$i2<$max;$i2++){
    $demo=mysql_fetch_assoc($max); //this is definitely wrong, help me to fix this, I don't know what is the Yii2 function for this.
    some_function($demo['id'], 'something');
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题?

aro*_*hev 5

首先,您需要构建查询并获取结果。

1)如果您没有模型,可以这样做:

use yii\db\Query;

...

$users = (new Query())
    ->select('id')
    ->from('users')
    ->where(['member_type' => 'd'])
    ->all()
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用构建查询Yii::$app->db->createCommand(),但这看起来更好。

2)如果您有模型,并希望以关联数组的形式获取结果:

use app\models\User;

...

$users = User::find()
    ->select('id')
    ->where(['member_type' => 'd'])
    ->asArray()
    ->all();
Run Code Online (Sandbox Code Playgroud)

然后循环遍历并应用您的函数:

foreach ($users as $user) {
    some_function($user['id'], 'something');
}
Run Code Online (Sandbox Code Playgroud)

而且您需要替换some_function调用某些方法类,因为它是OOP。

附注:请花点时间阅读文档。它被盖在那里。