php - How to avoid ambiguous field while reusing query shorthand in Yii2? -


i have table below.

create table (     id int,     relationid int,     status int )   create table b (     id int,     status int ) 

the class file below

class extends \yii\db\activerecord {     public function getb() {         return $this->hasone(b::class, ['id' => 'relationid']);     }      public function find() {         return new aquery(__class__);     } }  class aquery extends \yii\db\query {     public function isactive() {         return $this->andwhere(['status' => 1]);     }     public function isnotactive() {         return $this->andwhere(['status' => 0]);     } }  class b extends \yii\db\activerecord {     public function find() {         return new bquery(__class__);     } }  class bquery extends \yii\db\query {     public function isactive() {         return $this->andwhere(['status' => 1]);     }     public function isnotactive() {         return $this->andwhere(['status' => 0]);     } } 

i'm doing this

$model = a::find()             ->joinwith([                 'b' => function(bquery $query) {                      $query->isnotactive();                 }             ])             ->isactive()             ->one(); 

this produce error

column 'status' in clause ambiguous" 

the way know manually add alias $query->from , rewrite $query->andwhere. there easier way reuse query shorthand?

use activerecord::tablename() instead of aliasing (which doesn't seem active record feature in yii2). tablename() can accessed through modelclass property of \yii\db\activequery.

public function isactive() {     $modelclass = $this->modelclass;     return $this->andwhere([$modelclass::tablename().'.status' => 1]); } 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -