J'essaye d'ajouter des données dans le résultat de la pagination. Voici le code:
{
"datatable": {
"current_page": 1,
"data": [
{
"sale": 13047689,
"customer": "0017850000104",
"date": "2015-12-23 23:15:06",
"amount": "129.84",
}
],
"first_page_url": "http://intranet/api/user/sales/datatable?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://intranet/api/user/sales/datatable?page=1",
"next_page_url": null,
"path": "http://intranet/api/user/sales/datatable",
"per_page": "10",
"prev_page_url": null,
"to": 2,
"total": 1,
"totalData": {
"accumulated1": 235,
"accumulated2": 799,
"accumulated3": 1680,
},
}
}
Le résultat est:
{
"datatable": {
"current_page": 1,
"data": [
{
"sale": 13047689,
"customer": "0017850000104",
"date": "2015-12-23 23:15:06",
"amount": "129.84",
}
],
"first_page_url": "http://intranet/api/user/sales/datatable?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://intranet/api/user/sales/datatable?page=1",
"next_page_url": null,
"path": "http://intranet/api/user/sales/datatable",
"per_page": "10",
"prev_page_url": null,
"to": 2,
"total": 1,
"totalAmount": "129.84"
}
}
Je voudrais ajouter le totalAmount dans cet objet paginé.
Ce que j'ai essayé:
{
"datatable": {
"current_page": 1,
"data": {
"0": {
"sale": 13047689,
"customer": "0017850000104",
"date": "2015-12-23 23:15:06",
"amount": "129.84",
},
"totalAmount": "129.84"
},
"first_page_url": "http://intranet/api/user/sales/datatable?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://intranet/api/user/sales/datatable?page=1",
"next_page_url": null,
"path": "http://intranet/api/user/sales/datatable",
"per_page": "10",
"prev_page_url": null,
"to": 2,
"total": 1
}
}
Je trouve cette méthode sur Internet mais il semble qu'elle ne fait rien ... Le résultat est exactement comme ci-dessus sans cet attribut .
Une autre méthode que j'ai trouvée est put.
$result->put('totalAmount', $totalAmount);
Cette méthode fonctionne vraiment mais pas comme j'en ai besoin. C'est pour ajouter quelques lignes au résultat car cela ajoute l'attribut à l'intérieur de "data". Cela casse mon code lorsque je transmets ces résultats pour datatable.
$result->appends('totalAmount', $totalAmount);
Comment puis-je le faire ???
J'aimerais ceci: p>
{
"datatable": {
"current_page": 1,
"data": [
{
"sale": 13047689,
"customer": "0017850000104",
"date": "2015-12-23 23:15:06",
"amount": "129.84",
}
],
"first_page_url": "http://intranet/api/user/sales/datatable?custom=value&page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://intranet/api/user/sales/datatable?custom=value&page=1",
"next_page_url": null,
"path": "http://intranet/api/user/sales/datatable",
"per_page": "10",
"prev_page_url": null,
"to": 1,
"total": 1
}
}
Ou l'étape suivante serait:
// query select and filter
[...]
$totalAmount = $sales->sum('amount');
$result = $sales->paginate($rowsPerPage);
return $result;
Avez-vous de l'aide? Merci.
3 Réponses :
Veuillez essayer uniquement avec
$result->totalAmount = $totalAmount;
Et pour y accéder, utilisez simplement $ result-> totalAmount; .
C'est juste un objet, il ne devrait pas y avoir de problèmes
Cela fonctionne, mais lorsque le contrôleur renvoie le résultat au format json, l'attribut disparaît: return response () -> json (['datatable' => $ sales], 200);
Donc, lors de la sérialisation, ce champ disparaît?
vous devez d'abord créer une ressource pour votre réponse, puis ajouter des métadonnées au résultat comme ceci:
return (new UserCollection(User::all()->load('roles')))
->additional(['meta' => [
'key' => 'value',
]]);
Essayez ceci:
$totalAmount = $sales->sum('amount');
$result = $sales->paginate($rowsPerPage);
$custom = collect(['totalAmount' => $totalAmount]);
$data = $custom->merge($result);