У меня есть две таблицы с подробными сведениями о дизайне.
Главная таблица называется Format2006FlatFileMaster.
Подробная таблица называется Format2006FlatFileDetail.
Моя цель состоит в том, чтобы использовать поле в качестве ключа, а значение - это их потомок мастера.
Я имею в виду вот так
$details = ArrayHelper::map(Format2006FlatFileMaster::find()->all(), 'alias', function ($model) {
$model->format2006FlatFileDetails;
});
Я получил такие данные (например, это фиктивные данные)
'details' => [
'HDR01' => [
0 => app\models\utilities\Format2006FlatFileDetail#1
(
[yii\db\BaseActiveRecord:_attributes] => [
'id' => 1
'2006_flat_file_master_id' => 1
'field_name' => 'Record Lable'
'start' => 1
'width' => 5
'decimal' => null
'type' => 'C'
'mandatory' => 'Y'
'note' => 'HDR01'
]
[yii\db\BaseActiveRecord:_oldAttributes] => [
'id' => 1
'2006_flat_file_master_id' => 1
'field_name' => 'Record Lable'
'start' => 1
'width' => 5
'decimal' => null
'type' => 'C'
'mandatory' => 'Y'
'note' => 'HDR01'
]
[yii\db\BaseActiveRecord:_related] => []
[yii\db\BaseActiveRecord:_relationsDependencies] => []
[yii\base\Model:_errors] => null
[yii\base\Model:_validators] => null
[yii\base\Model:_scenario] => 'default'
[yii\base\Component:_events] => []
[yii\base\Component:_eventWildcards] => []
[yii\base\Component:_behaviors] => []
)
1 => app\models\utilities\Format2006FlatFileDetail#2
(
[yii\db\BaseActiveRecord:_attributes] => [
'id' => 2
'2006_flat_file_master_id' => 1
'field_name' => 'Message Function Code'
'start' => 6
'width' => 1
'decimal' => null
'type' => ''
'mandatory' => 'Y'
'note' => '1 Original 2 Update (handle manually) 3 Consolidation (handle manually)'
]
[yii\db\BaseActiveRecord:_oldAttributes] => [
'id' => 2
'2006_flat_file_master_id' => 1
'field_name' => 'Message Function Code'
'start' => 6
'width' => 1
'decimal' => null
'type' => ''
'mandatory' => 'Y'
'note' => '1 Original 2 Update (handle manually) 3 Consolidation (handle manually)'
]
[yii\db\BaseActiveRecord:_related] => []
[yii\db\BaseActiveRecord:_relationsDependencies] => []
[yii\base\Model:_errors] => null
[yii\base\Model:_validators] => null
[yii\base\Model:_scenario] => 'default'
[yii\base\Component:_events] => []
[yii\base\Component:_eventWildcards] => []
[yii\base\Component:_behaviors] => []
)
]
]
Как видите, данные о третьем параметре находятся в объектах массива, Мне нужен такой формат массива.
'details' => [
'HDR01' => [
0 => [
'id' => 1
'2006_flat_file_master_id' => 1
'field_name' => 'Record Lable'
'start' => 1
'width' => 5
'decimal' => null
'type' => 'C'
'mandatory' => 'Y'
'note' => 'HDR01'
],
1 => [
'id' => 2
'2006_flat_file_master_id' => 1
'field_name' => 'Message Function Code'
'start' => 6
'width' => 1
'decimal' => null
'type' => ''
'mandatory' => 'Y'
'note' => '1 Original 2 Update (handle manually) 3 Consolidation (handle manually)'
]
]
]
Пожалуйста, порекомендуйте.






вы можете решить эту проблему, объявив новый метод отношения в вашем Format2006FlatFileMaster с именем format2006FlatFileDetailsAsArray, и этот метод будет иметь asArray, по asArray ответ для отношения будет извлекаться в виде массива по вашему желанию.
или другим способом:
Вы можете использовать Join / JoinWith в запросе, вложенном в использование отношения модель->, таким образом вы можете установить asArray напрямую и получить массив ... вот так:
$query = yourModel::find()
->joinWith([....])
->andWhere(....)
->asArray()->all();
Примечание. Вы также можете протестировать Format2006FlatFileMaster::find()->asArray()->all(), возможно, это решит и вашу проблему, но я не уверен.
С уважением,
Хороший ответ..:)