我尝试从MSSQL数据库构建查询和获取记录。我创建了yii \ db \ Query对象来准备查询字符串:
$query = new Query;
$query->select(['Name', 'PositionX', 'PositionY'])
->from('mydb.dbo.position')
->addOrderBy('PositionX DESC')
->limit(100);
之后,我将Query对象添加到yii \ db \ mssql \ QueryBuilder
$qb = new QueryBuilder(\Yii::$app->db_mssql);
$qb->build($query);
现在我需要获取记录作为模型,例如:
$result = Position::findAll($qb);
但findAll()
抛出错误:
异常'yii \ db \ Exception',消息'类的对象 yii \ db \ mssql \ QueryBuilder无法转换为字符串失败 准备SQL:SELECT * FROM [mydb]。[dbo]。[position] WHERE [Name] =:qp0'
那我该怎么做呢? :)
答案 0 :(得分:0)
您正在混合不同类型的数据库访问策略之间的功能
您可以使用创建命令
$myPositions = Yii::$app->db->createCommand('SELECT Name, PositionX, PositionY
FROM position order PositionX DESC limit 100 ')
->queryAll();
或者您应该使用ActiveRecord,假设您的位置表有一个模型类Posotion
$myPositions = Position::find()
->select(['Name', 'PositionX', 'PositionY'])
->from('mydb.dbo.position')
->orderBy('PositionX DESC')
->limit(100)->all();
或使用查询构建器
$myPositions = (new \yii\db\Query())
->select(['Name', 'PositionX', 'PositionY'])
->from('mydb.dbo.position')
->orderBy('PositionX DESC')
->limit(100)
->all();