2017-08-09 8 views
-1

私は3つのレベルの関係を持つデータベースを持っています。 cheque-> account-> customerを選択します。今私は、次のメソッドを使用して、同時に3つのテーブルすべてからデータを取得しようとしています。YII 2 3番目のテーブルの関係データ

$query = Cheque::find(); 
$query->joinWith(['account.customer']); 
$query->orderBy('sr desc'); 
$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
]); 

チェックモデル:

class Cheque extends \common\components\db\ActiveRecord { 


    /** 
    * @inheritdoc 
    */ 
    public static function tableName() { 
     return 'cheque'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() { 
     return [ 
      [['sr'], 'integer'], 
      [['ID', 'account_ID'], 'required'], 
      [['ID', 'account_ID', 'created_by', 'branch_ID', 'application_ID'], 'string'], 
      [['serial_start', 'serial_end', 'status'], 'number'], 
      [['created_on'], 'safe'] 
     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function attributeLabels() { 
     return [ 
      'ID' => 'ID', 
      'account_ID' => 'Account ID', 
      'serial_start' => 'Serial Start', 
      'serial_end' => 'Serial End', 
      'created_on' => 'Created On', 
      'created_by' => 'Created By', 
      'branch_ID' => 'Branch ID', 
      'application_ID' => 'Application ID', 
      'status' => 'Status', 
      'sr' => 'ID' 
     ]; 
    } 

    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getAccount() { 
     return $this->hasOne(Account::className(), ['ID' => 'account_ID']); 
    } 


    public static function getActiveChequeBook($account_ID) { 
     return Cheque::findAll(['account_ID' => $account_ID, 'status' => array_search('Active', \common\models\Lookup::$cheque_status)]); 
    } 
    } 

しかし、これを実行して、私は次のエラーを取得:読み取り専用のプロパティを設定するメッセージ'と pre>の例外'のYii \ベースの\ InvalidCallException ':共通の\ models \ Account :: customer '

+0

回答を更新してaccount.customer関係を表示してください。 – scaisEdge

+0

チェックモデル – scaisEdge

+0

を表示してください@scaisEdge今すぐ見てください –

答えて

1

共通の\ models \ Accountモデルのプロパティカスタマーにはセッターがありません(getCustomerメソッドのみが存在します)。モデルをチェックし、適切なプロパティをクラスに追加します。

関連する問題