Is it possible to display key : value in a TextColumn ?

Hi all, is it possible for a TextColumn to display the key and the value when the DB field is an array? TextColumn always returns a string without the keys. I have that in my DB : {"panel": "admin", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0"} And I want to display that in my table : • panel : admin • user_agent : Mozilla/5.0 (Windows NT 10... For that I try this :
TextColumn::make('properties')
->label('Détails')
->getStateUsing(fn($record) => $record->properties)
->listWithLineBreaks()
->bulleted()
->wrap()
->toggleable()
->html(),
TextColumn::make('properties')
->label('Détails')
->getStateUsing(fn($record) => $record->properties)
->listWithLineBreaks()
->bulleted()
->wrap()
->toggleable()
->html(),
But in the end all I get is this without the keys: • admin • Mozilla/5.0 (Windows NT 10... If I DD $record->propreties, I get my array :
array:2 [// xxx.php:175
"panel" => "admin"
"user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0"
]
array:2 [// xxx.php:175
"panel" => "admin"
"user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:135.0) Gecko/20100101 Firefox/135.0"
]
Thanks for your help 🙂 cf. : https://www.answeroverflow.com/m/1176827225736224838
How to show array key in TextColumn - Filament
Hi i have Variant model whre i save json in format like this {"Name":"Value"} and i'm casting it
protected $casts = [
'variant_attributes_json' => 'array',
];
protected $casts = [
'variant_attributes_json' => 'array',
];
How could i display key into textcolumn or other column? Because if i put it into textCol it in state is only value ```php Tables\Columns\TextColumn::make('v...
Solution:
Hi, thanks for your help 🙂 Based on your solution, I managed to get the desired result with that: ```php TextColumn::make('properties')...
No description
Jump to solution
4 Replies
toeknee
toeknee5d ago
->formatStateUsing(function($record) {
if($record->properties) {
$values = '';
foreach($record->properties as $key => $property) {
$values = $key . : . $property .'<br/>';
}
}
})
->formatStateUsing(function($record) {
if($record->properties) {
$values = '';
foreach($record->properties as $key => $property) {
$values = $key . : . $property .'<br/>';
}
}
})
quick rough solution that should work.
Solution
Alexandre
Alexandre5d ago
Hi, thanks for your help 🙂 Based on your solution, I managed to get the desired result with that:
TextColumn::make('properties')
->label('Détails')
->formatStateUsing(function ($record) {
if (is_array($record->properties)) {
$formattedState = '<ul class="list-disc">';
foreach ($record->properties as $key => $value) {
$formattedState .= "<li><strong>{$key} :</strong> {$value}</li>";
}
$formattedState .= '</ul>';

return $formattedState;
}

return $record->properties;
})
->wrap()
->toggleable()
->html(),
TextColumn::make('properties')
->label('Détails')
->formatStateUsing(function ($record) {
if (is_array($record->properties)) {
$formattedState = '<ul class="list-disc">';
foreach ($record->properties as $key => $value) {
$formattedState .= "<li><strong>{$key} :</strong> {$value}</li>";
}
$formattedState .= '</ul>';

return $formattedState;
}

return $record->properties;
})
->wrap()
->toggleable()
->html(),
->getStateUsing(fn($record) => $record->properties) method seems unnecessary in this case. So everything's good, I just have the impression that it's not very clean, I don't know why. 😅 Anyway, thanks for everything 😉
No description
toeknee
toeknee4d ago
formatStateUsing is just called in the rendering method, opposed to getStateUsing which would call it for each record to get the state. If there are no proerties, then formatStateUsing isn't run.
Alexandre
AlexandreOP4d ago
Ahhh I see, thank you for your clarification 🙂

Did you find this page helpful?