{"id":1069,"date":"2023-07-09T07:30:00","date_gmt":"2023-07-09T05:30:00","guid":{"rendered":"https:\/\/www.ilbytecidio.it\/?p=1069"},"modified":"2023-07-02T16:31:00","modified_gmt":"2023-07-02T14:31:00","slug":"laravel-datatable-filtrare-per-data","status":"publish","type":"post","link":"https:\/\/www.ilbytecidio.it\/?p=1069","title":{"rendered":"Laravel DataTable: filtrare per data"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.ilbytecidio.it\/wp-content\/uploads\/2023\/07\/DataTable.png\"><img loading=\"lazy\" decoding=\"async\" width=\"671\" height=\"289\" src=\"https:\/\/www.ilbytecidio.it\/wp-content\/uploads\/2023\/07\/DataTable.png\" alt=\"\" class=\"wp-image-1103\" srcset=\"https:\/\/www.ilbytecidio.it\/wp-content\/uploads\/2023\/07\/DataTable.png 671w, https:\/\/www.ilbytecidio.it\/wp-content\/uploads\/2023\/07\/DataTable-300x129.png 300w, https:\/\/www.ilbytecidio.it\/wp-content\/uploads\/2023\/07\/DataTable-500x215.png 500w\" sizes=\"auto, (max-width: 671px) 100vw, 671px\" \/><\/a><\/figure>\n\n\n\n<p>Fra i programmatori PHP di passaggio ce ne sar\u00e0 senz&#8217;altro qualcuno che utilizza il framework <a rel=\"noreferrer noopener\" href=\"https:\/\/laravel.com\/\" target=\"_blank\">Laravel<\/a> come base per il proprio progetto. E qualcuno forse utilizza DataTable per creare facilmente delle viste dei propri dati su database. Se non conoscete DataTable, ve lo consiglio perch\u00e9 vi risparmia un sacco di lavoro sporco con HTML e JavaScript, permettendovi di utilizzare il vostro tempo per qualcos&#8217;altro. Vi consiglio in particolare il pacchetto <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/yajra\/laravel-datatables\" target=\"_blank\">yajra\/laravel-datatables<\/a>. La cosa strana di quest&#8217;ottima integrazione \u00e8 che nessuno abbia pensato all&#8217;eventualit\u00e0 di filtrare i risultati per data e ora, se presenti del database. Immaginiamo per esempio di gestire il database di una biblioteca e di avere un elenco di libri con la data di prestito. Non sarebbe utile filtrare, per esempio, i libri prestati un dato giorno, e quindi in scadenza? Fortunatamente non \u00e8 difficile.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Non mi dilungher\u00f2 sul modo di utilizzare il pacchetto consigliato: mi aspetto che se siete arrivati a quest&#8217;articolo abbiate gi\u00e0 una tabella funzionante. In caso contrario, i tutorial non mancano, e vi consiglio di basarvi sulla documentazione e gli esempi forniti insieme al pacchetto.<br>Presumer\u00f2 che abbiate creato la vostra estensione della classe DataTable e che la stiate usando per la resa sia degli script che del codice HTML.<\/p>\n\n\n\n<p>Per prima cosa avrete bisogno di due campi di input per inserire l&#8217;intervallo di date desiderato:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;input type=\"date\" id=\"data_minima\"&gt;\n&lt;input type=\"date\" id=\"data_massima\"&gt;<\/code><\/pre>\n\n\n\n<p>Usando il tipo date per i campi, il browser si occuper\u00e0 da s\u00e9 di mostrare un piccolo calendario da cui scegliere la data iniziale e la data finale senza bisogno di librerie esterne.<br>Ora, nella vostra classe DataTable avete sicuramente il vostro metodo html, che andr\u00e0 modificato cos\u00ec:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public funcion html() {\n  return $this-&gt;builder\n    -&gt;minifiedAjax('', '\n      data.data_minima  = $(\"#data_minima\");\n      data.data_massima = $(\"#data_minima\");\n    )\n    \/\/ ... etc\n}<\/code><\/pre>\n\n\n\n<p>Ci\u00f2 aggiunger\u00e0 allo script finale le istruzioni per includere le due date ai filtri inviati al server per la selezione dei dati. A questo punto dobbiamo modificare anche la funzione dataTable perch\u00e9 le utilizzi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public funcion dataTable($query) {\n  return datatables()\n    -&gt;eloquent($query)\n    \/\/ ... etc\n    -&gt;filter(function ($query) {\n      if (request('data_minima')) {\n        $query-&gt;where('data', '&gt;=', request('data_minima'));\n      }\n      if (request('data_massima')) {\n        $query-&gt;where('data', '&lt;=', request('data_massima'));\n      }\n    }, true);\n}<\/code><\/pre>\n\n\n\n<p>Fatto. Ora dovreste poter selezionare la data dai nuovi campi ed i dati saranno immediatamente filtrati.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fra i programmatori PHP di passaggio ce ne sar\u00e0 senz&#8217;altro qualcuno che utilizza il framework Laravel come base per il proprio progetto. E qualcuno forse utilizza DataTable per creare facilmente delle viste dei propri dati su database. Se non conoscete &hellip; <a href=\"https:\/\/www.ilbytecidio.it\/?p=1069\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[140,141,115,139,116],"class_list":["post-1069","post","type-post","status-publish","format-standard","hentry","category-programmazione-web","tag-datatable","tag-html","tag-javascript","tag-laravel","tag-php"],"views":352,"_links":{"self":[{"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=\/wp\/v2\/posts\/1069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1069"}],"version-history":[{"count":7,"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=\/wp\/v2\/posts\/1069\/revisions"}],"predecessor-version":[{"id":1106,"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=\/wp\/v2\/posts\/1069\/revisions\/1106"}],"wp:attachment":[{"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ilbytecidio.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}