在线等!Yii2.0 可以实现三个表关联搜索吗? [ 2.0 版本 ]
例如:
a表: user表
b表:中间关联表 relation_user
c表:用户relation_detail 表
现在需要通过relation_user 中某个字段去关联relation_detail ;
最后能搜出relation_detail 中的name 字段
请问三表关联搜索这个怎么实现?
daisy888 补充于 2017-06-12 15:44
最佳答案
-
varTable(),要是mongoDB可以使用多个var()
class Order extends ActiveRecord { public function getOrderItems() { return $this->hasMany(OrderItem::className(), ['order_id' => 'id']); } public function getItems() { return $this->hasMany(Item::className(), ['id' => 'item_id']) //使用via() ->via('orderItems'); } }
共 4 条回复
其他 6 个回答
-
-
model文件:
class NewsSearch extends News { public $nickname;//添加变量 /** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = News::find(); $query->joinWith(['supplierProfile']);//关联表 $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $this->load($params); if (!$this->validate()) { return $dataProvider; } $query->andFilterWhere(['like', 'nickname', $this->nickname]);//搜索 return $dataProvider; } }
index.php文件
[ 'attribute' => 'nickname', 'label' => '资讯作者', 'value'=>'supplierProfile.nickname', 'filter' => Html::activeTextInput($searchModel, 'nickname', [ 'class' => 'form-control' ]), ],
共 3 条回复 -
-
wuyuxifeng 回答于 2017-06-12 16:22 举报
实现searchModel,gredview照样使用。
比如搜索relation_user中username单独查就行了:$user=relation_user::find()->where(['username'=>'xxxx'])->one(); $query->andFilterWhere([ 'relation_detail.user_id'=>$user->id ]);
-
//控制器代码
$infos = DbType::find()->joinWith('goods')->where(['type_id'=>1])->asArray()->one();//model代码
public function getGoods(){//一个type表中的id 在goods表中有多个数据,所以用hasmany return $this->hasMany(DbGoods::className(),['goods_id'=>'repair_goods_id']) ->viaTable('repair_goods',['repair_goods_type'=>'type_id']); }
如果对应你那三个表的写法就是
public function getXXXXX(){
return $this->hasMany(DbRelationDetail::className(),['user_name'=>'user_name']) ->viaTable('relation_user',['id'=>'user_id']); }
jayrui612 觉得很赞 -
blog_muzili 回答于 2018-08-24 09:21 举报
用left join 不能实现吗?
( new \yii\db\Query() )
->select("{{%relation_detail}}.name") ->from("{{%user}}") ->leftJoin("{{%relation_user}}", "{{%user}}.user_id = {{%relation_user}}.id") ->leftJoin("{{%relation_detail}}", "{{%relation_user}}.user_name = {{%relation_detail}}.user_name") ->all();
daisy888
注册时间:2017-04-16
最后登录:2018-03-14
在线时长:12小时2分
最后登录:2018-03-14
在线时长:12小时2分
- 粉丝0
- 金钱60
- 威望0
- 积分180