Php 连接表Yii 2-MariaDB异常

Php 连接表Yii 2-MariaDB异常,php,mysql,join,yii2,Php,Mysql,Join,Yii2,您好,我使用的是最新版本的xampp,它包含了MariaDB,当我试图在yii2中连接表时,它说我有一个MariaDB异常。请参见下面的屏幕截图。 我试图做的是通过TrNo加入schead和scstock,请参见数据库表的屏幕 谢德 SCSTOCK 我还是一个新加入的人,所以我想帮助解决这个例外 下面是我的联接表的代码 public static function getFirstYearFirstTerm($currcode){ return Scstock::find()

您好,我使用的是最新版本的xampp,它包含了MariaDB,当我试图在yii2中连接表时,它说我有一个MariaDB异常。请参见下面的屏幕截图。

我试图做的是通过TrNo加入schead和scstock,请参见数据库表的屏幕

谢德

SCSTOCK

我还是一个新加入的人,所以我想帮助解决这个例外

下面是我的联接表的代码

  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();
    }
它位于activecourseum.php中的中,具有
tableName
函数

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

但是我想我没有在这笔交易中使用它。

你在表格的报价中有一个输入错误。线路

->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();
}

请分享你的执行错误截图。它在第一个截图中。我找不到任何截图。我只看到你的密码…:(哦,很抱歉,可能它没有显示在您的计算机上。我已经在imgur中上载了它。这里:我没有访问imgur的权限。如果可以的话,请复制粘贴???如何在它们之间添加关系?此代码的问题是,这两个表之间没有显式关系,只是它具有相同的TrNo,所以我别无选择,只能使用。)leftJoin。您可以在代码中添加关系,而数据库中没有关系。我已使用此信息更新了答案。
return Scstock::find()
          ->select('scstock.*')
          ->joinWith('schead')
          ->where(['schead.terms' => '1ST', 'schead.styear' => 1])
          ->asArray()
          ->all();
}