GridView::Widget 从另一个 table 搜索数据
GridView::Widget search data from another table
我有一个 GridView::widget 是用这个方法填充的:
StabilimentiController.php
public static function getGridColumns($isMine = true, $readonly = false) {
$c = [
'denominazione',
[
'attribute' => 'provincia',
'value' => 'indirizzo.provincia',
'headerOptions' => ['class' => 'table-col-provincia'],
'contentOptions' => ['class' => 'table-col-provincia'],
],
[
'attribute' => 'created_by',
'value' => 'azienda.ragioneSociale',
'headerOptions' => ['class' => 'table-col-createdBy'],
'contentOptions' => ['class' => 'table-col-createdBy'],
]
];
return $c;
}
我在为字段 created_by 创建可搜索的输入框时遇到了一些问题。
Created_by
在我的模型中定义为整数,它是唯一标识公司(azienda)的代码。
在我的 Stabilimenti.php
模型中,我有这个方法来捕获它,然后使用 getGridColumns 方法中的 .notation 我可以到达我感兴趣的 ragioneSociale 字段。
/**
* @return \yii\db\ActiveQuery
*/
public function getAzienda() {
return $this->hasOne(Azienda::className(), ['id' => 'azienda_id'])->inverseOf('stabilimenti');
}
输出是我想要的,唯一的问题是我的 GridView 中的可搜索字段将 int 代码而不是 ragioneSociale
字符串作为输入,并且不是很用户友好。
在我的StabilimentiSearch.php
public function rules(){
return [
[['id', 'azienda_id', 'created_by', 'updated_by'], 'integer'],
[['denominazione', 'indirizzo', 'citta', 'localita', 'provincia', 'cap', 'produttore', 'utente', 'azienda' ], 'safe'],
array('ragioneSociale', 'safe', 'on'=>'search'),
];
我将 ragioneSociale
设置为安全并带有搜索选项,但我在将其正确绑定到 inputBox 时遇到了一些困难。
参见。如果你想下拉,试试这个:
[
'attribute' => 'created_by',
'value' => 'azienda.ragioneSociale',
'headerOptions' => ['class' => 'table-col-createdBy'],
'contentOptions' => ['class' => 'table-col-createdBy'],
'filter' => ArrayHelper::map(Azienda::find()->asArray()->all(), 'id', 'ragioneSociale')
]
如果需要输入框和文本搜索,请参阅https://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview。搜索模型添加属性和过滤条件:
class StabilimentiSearch extends Stabilimenti
{
public $ragioneSociale;
public function rules()
{
return [
// ... more stuff here
[['ragioneSociale'], 'safe'],
// ... more stuff here
];
}
public function search($params)
{
// create ActiveQuery
$query = Tour::find();
$query->joinWith(['azienda']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
// No search? Then return data Provider
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
// Some filters
$query->andFilterWhere([
//... other searched attributes here
])
->andFilterWhere(['like', 'azienda.ragioneSociale', $this->ragioneSociale]);
return $dataProvider;
}
}
并使用此 属性 作为 GridView 中的属性:
[
'attribute' => 'ragioneSociale',
'value' => 'azienda.ragioneSociale',
'headerOptions' => ['class' => 'table-col-createdBy'],
'contentOptions' => ['class' => 'table-col-createdBy'],
]
我有一个 GridView::widget 是用这个方法填充的:
StabilimentiController.php
public static function getGridColumns($isMine = true, $readonly = false) {
$c = [
'denominazione',
[
'attribute' => 'provincia',
'value' => 'indirizzo.provincia',
'headerOptions' => ['class' => 'table-col-provincia'],
'contentOptions' => ['class' => 'table-col-provincia'],
],
[
'attribute' => 'created_by',
'value' => 'azienda.ragioneSociale',
'headerOptions' => ['class' => 'table-col-createdBy'],
'contentOptions' => ['class' => 'table-col-createdBy'],
]
];
return $c;
}
我在为字段 created_by 创建可搜索的输入框时遇到了一些问题。
Created_by
在我的模型中定义为整数,它是唯一标识公司(azienda)的代码。
在我的 Stabilimenti.php
模型中,我有这个方法来捕获它,然后使用 getGridColumns 方法中的 .notation 我可以到达我感兴趣的 ragioneSociale 字段。
/**
* @return \yii\db\ActiveQuery
*/
public function getAzienda() {
return $this->hasOne(Azienda::className(), ['id' => 'azienda_id'])->inverseOf('stabilimenti');
}
输出是我想要的,唯一的问题是我的 GridView 中的可搜索字段将 int 代码而不是 ragioneSociale
字符串作为输入,并且不是很用户友好。
在我的StabilimentiSearch.php
public function rules(){
return [
[['id', 'azienda_id', 'created_by', 'updated_by'], 'integer'],
[['denominazione', 'indirizzo', 'citta', 'localita', 'provincia', 'cap', 'produttore', 'utente', 'azienda' ], 'safe'],
array('ragioneSociale', 'safe', 'on'=>'search'),
];
我将 ragioneSociale
设置为安全并带有搜索选项,但我在将其正确绑定到 inputBox 时遇到了一些困难。
参见
[
'attribute' => 'created_by',
'value' => 'azienda.ragioneSociale',
'headerOptions' => ['class' => 'table-col-createdBy'],
'contentOptions' => ['class' => 'table-col-createdBy'],
'filter' => ArrayHelper::map(Azienda::find()->asArray()->all(), 'id', 'ragioneSociale')
]
如果需要输入框和文本搜索,请参阅https://www.yiiframework.com/wiki/653/displaying-sorting-and-filtering-model-relations-on-a-gridview。搜索模型添加属性和过滤条件:
class StabilimentiSearch extends Stabilimenti
{
public $ragioneSociale;
public function rules()
{
return [
// ... more stuff here
[['ragioneSociale'], 'safe'],
// ... more stuff here
];
}
public function search($params)
{
// create ActiveQuery
$query = Tour::find();
$query->joinWith(['azienda']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
// No search? Then return data Provider
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
// Some filters
$query->andFilterWhere([
//... other searched attributes here
])
->andFilterWhere(['like', 'azienda.ragioneSociale', $this->ragioneSociale]);
return $dataProvider;
}
}
并使用此 属性 作为 GridView 中的属性:
[
'attribute' => 'ragioneSociale',
'value' => 'azienda.ragioneSociale',
'headerOptions' => ['class' => 'table-col-createdBy'],
'contentOptions' => ['class' => 'table-col-createdBy'],
]