php yii多表查询

一个Company记录可以对应多个CompanyUser纪录

Company表:

[['id', 'nature_id', 'scale_id', 'pro_id', 'created_at', 'updated_at'], 'integer'],

[['id','company_name'], 'required'],

[['company_logo','company_desc','company_name','nature','scale','pro'], 'string']

public function getCompanyuser()

{

return $this->hasMany(CompanyUser::className(), ['company_id' => 'id']);

}

CompanyUser表

[['id', 'company_id', 'user_id'], 'integer']

关系

public function getCompany()

{

return $this->hasOne(Company::className(), ['id' => 'company_id']);

}

public function getUser()

{

return $this->hasOne(User::className(), ['id' => 'user_id']);

}

CompanyController.php

function actionIndex() {

$user_id = \Yii::$app->user->id;

$models = Company::find()->innerJoinWith(['companyuser'])->where(['user_id'=>$user_id])->orderBy(['created_at' => SORT_DESC])->asArray()->all();

$data = [];

foreach ($models as $model) {

$data[] = $model;

}

return json_encode($data);

}

这样可以根据companyuser表的user_id设置条件查询

-----------------------------------------------------------------------------------

SellController.php

$models = BuyRecord::find()->innerJoinWith(['d'=>function($query) {$query->andWhere('tp=1');}])->with('u')->where(['user_id_sell' => $user_id, 'status'=>1,'data_id'=>$dataid])->orderBy(['created_at' => SORT_DESC])->asArray()->all();

BuyRecord.php

public function getU()

{

return $this->hasOne(U::className(), ['id' => 'user_id']);

}

public function getD()

{

return $this->hasOne(Data::className(), ['id' => 'data_id']);

}