我是这样做的 1. searchModel里面: $query = Order::find()->from(['o' => Order::tableName()]); $query->joinWith(['dcUser0 u', 'product0 p']); 2. Order model里面 public function getDcUser0() { return $this->hasOne(DcUser::className(), ['uid' => 'uid']); } public function getProduct0() { return $this->hasOne(Product::className(), ['product_id' => 'product_id'])->viaTable(OrderToProduct::tableName(), ['order_id' => 'order_id']); } 表前缀: 1. class OrderSearch extends Order 2. Order model里面: public static function tableName() { return '{{%order}}'; } gii生成Order时候要选有表前缀 关联做好后 gridview写法: [ 'label' => '商品名', 'attribute' => 'product_name', 'format' => 'raw', 'value' => 'product0.name', 'filter' => $searchModel->product_list, ], list public static function getActiveDataProvider(){ return class_model::getActiveDataProvider(self::find(),5); } public function count($where_arg){ return self::find()->where($where_arg)->count(); } public function all($where_arg){ return self::find()->where($where_arg)->all(); }