2016-09-01 8 views
1

こんにちは私はMariaDBを持つxamppの最新バージョンを使用しています.yii 2のテーブルに参加しようとしているときにMariaDBの例外があると言います。下のスクリーンショットを参照してください。 enter image description hereテーブルの結合Yii 2 - MariaDBの例外

私がしようとしているのは、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}}'; 
    } 

しかし、私はこの取引では使用しないと思います。

+0

あなたexeceptionエラーのスクリーンショットを共有してください。.. –

+0

それは私がすべてのスクリーンショットを見つけるいけない最初のスクリーンショット – user827391012

+0

です。私はちょうどあなたのコードを参照してください... :( –

答えて

2

あなたはテーブルの引用に誤字があります。ライン

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

は、それが1つまたは他のつまり、あなたがすべてのテーブル名とカラム名を引用したり、それらのどれを引用していないのどちらかに固執するのがベストです

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

または

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

をお読みください。


より良いオプションは、あなたのScstock、モデル内の関係としてschead追加することです。

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

どのように私はそれらの間の関係を追加するのですか?このコードの問題は、2つのテーブルの間に明示的な関係がないということです。 leftJoinを使う以外に選択肢はありません。 – user827391012

+0

リレーションシップをコードなしでデータベースに追加できます。私はこの情報で答えを更新しました。 – topher

関連する問題