에서 관련 모델을 먼저 정렬 해주세요. 비슷한 질문이 있습니다. Filter setup for related model in GridView. 나는 그것을 따라하려고했지만 그 트릭을하지 않았다.Search + GridView (yii2)
나는 또한가는 방법에 대한 다른 가이드를 확인했지만 여전히 붙어 있습니다. 참고로 , 난 여전히 내보기에서 검색 필드 + 정렬 기능이없는, 여기 그러나
http://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview/
http://www.yiiframework.com/doc-2.0/guide-output-data-widgets.html#working-with-model-relations
- 이 가이드를 따라 갔다.
나는 CRUD 기능을 만들기 위해 gii을 사용했다.
내 Manufacturers.php (모델) :
// basic model, nothing special here. // The following line was added to create a relation public function getVendor() { return $this->hasOne(Vendors::className(), ['vendor_id' => 'vendor_id']); }
내 ManufacturersSearch.php (모델) :
namespace app\models; use Yii; use yii\base\Model; use yii\data\ActiveDataProvider; use app\models\Manufacturers; /** * ManufacturersSearch represents the model behind the search form about `app\models\Manufacturers`. */ class ManufacturersSearch extends Manufacturers { public $vendor; /** * @inheritdoc */ public function rules() { return [ [['manufacturer_id', 'vendor_id'], 'integer'], [['name', 'vendor'], 'safe'], ]; } /** * @inheritdoc */ public function scenarios() { // bypass scenarios() implementation in the parent class return Model::scenarios(); } /** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Manufacturers::find(); $query->joinWith("vendor"); // add conditions that should always apply here $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $dataProvider->sort->attributes['vendor_name'] = [ // The tables are the ones our relation are configured to // in my case they are prefixed with "tbl_" 'asc' => ['vendor.name' => SORT_ASC], 'desc' => ['vendor.name' => SORT_DESC], ]; if (!$this->load($params) && $this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } // grid filtering conditions $query->andFilterWhere([ 'manufacturer_id' => $this->manufacturer_id, 'vendor_id' => $this->vendor_id, ]); $query->andFilterWhere(['like', 'name', $this->name]); $query->andFilterWhere(['like', 'vendor.vendor', $this->vendor]); return $dataProvider; } }
그리고 마지막으로 내보기 파일 :
<?php Pjax::begin(); ?> <?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'name', [ 'label' => 'Hauptlieferant', 'value' => 'vendor.name', ], ['class' => 'yii\grid\ActionColumn'], ], ]); ?> <?php Pjax::end(); ?></div>
이 내 전류 출력 :
그래서, 좀 노력하고, 이후 대신 ID의, 나는 (내가 원하는 것입니다) 이름을 얻고있다. 그러나 어떤 이유로 이러한 필드는 정렬 할 수 없으며 검색 할 수 없습니다.
표 "제조업체"뿐만 아니라 테이블 "공급 업체"열 "이름"올바른 방향으로 어떤 힌트를
감사가 있습니다.
는