У меня есть 3 таблицы, и я сделал отношение к какой таблице с помощью таблицы полей. Я хочу показать строку имени из какой таблицы в Gridview.but, она показывает мне строку данных, разделенных запятой. Я хочу, чтобы все данные в разных столбцах. как результат запроса sql с повторным полем.
это моя tbon.php модель:yii2 отдельные данные запятой в gridview для каждой записи отношения
public function getWhat()
{
return $this->hasMany(What::className(), ['idw' => 'idw'])
->viaTable('Field', ['id' => 'id']);
}
public function getField()
{
return $this->hasMany(Field::className(), ['id' => 'id']);
}
и TbonSearch.php я добавил эти коды:
public $what;
public $field;
и
[['field','what'],'safe']
и в методе поиска, у меня есть добавлено:
$query = Tbon::find()
->joinWith(['field'])
->joinWith(['what']);
и для сортировки:
$dataProvider->sort->attributes['what'] = [
'asc' => ['what.name' => SORT_ASC],
'desc' => ['what.name' => SORT_DESC],
];
и добавить фильтра поиска:
->andFilterWhere(['like', 'what.name', $this->what]);
в индексе я добавил этот код и здесь есть проблема, я думаю:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
[
'label'=>'Name',
'attribute' => 'what',
'value' => function ($data) {
$str = '';
foreach($data->what as $name) {
$str .= $name->name.',';
}
return $str;
},
],
данные например: a, b, c, d для поля имени! но я хочу ID, а затем в следующем ряду ID и b и т. д.
любая помощь будет оценена!
да я хочу сделать это! но я не могу. потому что мое отношение HasMany и оно возвращает массив, поэтому я не могу использовать способ, о котором вы упоминали. Когда я делаю то, что он показывает [не установлен]. и еще одна вещь ... моя таблица - tbwhats, и я использую то, что для отношения, как вы можете видеть в функции getWhat. – mayhem
, чтобы дать правильный ответ: можете ли вы загрузить схему базы данных? – R13e
Спасибо R13e за подробный ответ. Моя цель - именно в результате того, что вы указали в книге «Авторы». там вы можете видеть, что вы показали всех писателей книги только в одном поле ... 1 Дуглас, 3 Гарри, 2 Джейн ... и разделите их на «,». я хочу сделать 3 избыточных строки и в каждом Дугласе, другой Гарри, а третий - Джейн. точно так же, как показано в дополнительном Gridview, но плюс повторение идентификатора и имени книги. Еще раз спасибо. – mayhem