Yii 2 MSSQL QueryBuilder

时间:2017-11-08 09:46:01

标签: php yii yii2

我尝试从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'

那我该怎么做呢? :)

1 个答案:

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