加入表Yii 2 - MariaDB异常

时间:2016-09-01 02:02:40

标签: php mysql join yii2

您好我正在使用最新版本的xampp,它有MariaDB,当我尝试连接yii 2中的表时,它说我有一个MariaDB异常。请参见下面的截图。 enter image description here

我要做的是通过TrNo加入schead和scstock,查看数据库表的屏幕。

SCHEAD enter image description here

SCSTOCK enter image description here

我对JOINING仍然很新,所以我想帮助解决这个异常。

以下是我的联接表的代码。

  public static function getFirstYearFirstTerm($currcode){
    return Scstock::find()
              ->select('scstock.*')
              ->leftJoin('schead', '  `schead.TrNo = scstock.TrNo')
              ->where(['schead.terms' => '1ST', 'schead.styear' => 1])
              ->asArray()
              ->all();
    }

它位于具有tableName功能的ActiveCurriculum.php中。

public static function tableName()
  {
     // return '{{%ccsubject}}';
    return '{{%schead}}';
  }

但我认为我在这次交易中没有使用它。

1 个答案:

答案 0 :(得分:1)

你引用表格时有一个拼写错误。这条线

->leftJoin('schead', '  `schead.TrNo = scstock.TrNo')

应该阅读

->leftJoin('schead', '  `schead`.`TrNo` = `scstock`.`TrNo`')

->leftJoin('schead', '  schead.TrNo = scstock.TrNo')

最好坚持一个或另一个,即你引用所有的表名和列名,或者你不引用它们。

更好的选择是在schead模型中添加Scstock作为关系。

public function getSchead() {
    return $this->hasOne(Schead::className(), ['TrNo' => 'TrNo']);
}

这会将您的查询减少到:

return Scstock::find()
          ->select('scstock.*')
          ->joinWith('schead')
          ->where(['schead.terms' => '1ST', 'schead.styear' => 1])
          ->asArray()
          ->all();
}