2016-09-02 4 views
1

こんにちは、主に私はscstockデータを使用していますが、sectionpartはschead.sectionにありますので、結合されたテーブルschead.sectionの値にアクセスしようとしています。私がしたことは、私がセクションの欄にアクセスできるように、scheadとschstockに一緒に参加することでした。ここに私がしたことがあります。 TRNO経由scheadます結合されたテーブルの値を取得するYii 2

 $subject = ActiveCurriculum::find() 
      ->select('scstock.*') 
      ->leftJoin('schead', 'schead.TrNo = scstock.TrNo') 
      ->where([ 'schead.TrNo' => $TrNo]) 
      ->one(); 

    $activesubject = new ActiveSubject(); 
    $activesubject->clientid = $clientid; 
    $activesubject->TrNo = $subject->TrNo; 
    $activesubject->subjectcode = $subject->subjectcode; 
    $activesubject->schedday = $subject->schedday; 
    $activesubject->schedtime = $subject->schedtime; 
    $activesubject->section = $subject->section; 
    $activesubject->room = $subject->room; 
    $activesubject->units = $subject->units; 
    $activesubject->save(); 
//reduces the slot of ccsubject by 1 
    $subject->slots = $subject->slots - 1; 
    //never forget the saving part 
    $subject->save(); 

まず$subjectが参加することsctockテーブルにアクセスします。 $activesubjectは、値を格納するためにsubjectcontainerテーブルにアクセスします。今、私の問題はこのエラーが発生していることです。

enter image description here

誰かがこの問題を解決しようとする際に私を助けることができますか?

+0

このようにしてみてください - > leftJoin( 'schead as sch'、 'sch.TrNo = scstock.TrNo') - >ここで(['sch.TrNo' => $ TrNo]) ' – GAMITG

+0

私はそれを試しましたまだ未知のプロパティとしてセクションを取得 – user827391012

答えて

1

モデル内のScheadオブジェクトへのリレーションを必ず設定してください。このような関係の例:

/** 
* @property $schead Schead 
*/ 
class YourModel extends \yii\db\ActiveRecord 
{ 
    /** 
    * @return Schead 
    */ 
    public function getSchead() 
    { 
     return $this->hasOne(Schead::className(), ['field1' => 'field2']); 
    } 
} 

また、$subject->schead.sectionは、関連するモデル属性にアクセスする間違った方法です。代わりに$subject->schead->sectionを使用してください。持つscheadがオプションである場合、例えば、最初の関連オブジェクトの存在を確認することを忘れないでください:

$subject->schead ? $subject->schead->section : null 

はまた、(おそらくsched/schead?)タイプミスのコードを確認してください。リレーションシップの詳細については、official docsを参照してください。

+0

これはどうすれば使用できますか?私の場合、ActiveSubject.php(私がテーブルに加わっている場所)、Activecurriculum.php(これは 'tableName(){scstock}')とschead.phpの 'scame' tableName'が置かれている3つのファイルがあります。 – user827391012

+0

@Quinlanlent 'schead'をリレーションとするモデルで定義します。 – arogachev

+0

yiiは自動的にgetSchead関数を読み込みますか? – user827391012

関連する問題