O idee de construire. (Laravel/VUE.JS)

Salut, o sa dau un exemplu ca sa intelegeti ce vreau sa fac. (procesul)

Am o tabela in MySQL care are 5 linii cu date. In platforma am optiunea sa modifica aceste linii printr-o notificare, totul ok. Imi apar liniile in platforma si eu le modific (doar una sau 2, nu pe toate neparat) si trimit notificarea.
Modificarile facute mi se salveaza intr-o tabela noua (ceva de genul data_notifications), acolo am toate cele 5 linii cu modificarile facute de mine. (Alea care nu le-am modificat, au ramas asa, s-au pus in baza de date corespunzator fara modificari, pt ca nu le-am modificat)

Cum fac acum, sa afisez in platforma (printr-un if ceva), sa apara doar liniile pe care le-am modificat? Sa fac o comparatie dintre tabela data_notifications si cea originala unde am datele…

Sper ca ati inteles.

Platforma salveaza in data_notifications printr-un loop:

public function storeActivities(Request $request)
{
    $this->validate($request, [
        'project_id' => 'required',
        'id' => 'required',
    ]);
    foreach($request->activities as $activity)
    {
        NotificationActivities::updateOrcreate(['name' => $activity['name'], 'project_id' => $request->project_id, 'notification_id' => $request->id,],[
            'activity' => $activity['activity'],
            'name' => $activity['name'],
            'description' => $activity['description'],
            'results' => $activity['results'],
            'resources' => $activity['resources'],
        ]);
    }
    return $this->notification($request->id);
}

La salvare (cand trimit request-ul spre DB) in VUE e ceva de genul:

saveActivity()
{
    this.saveNotificationActivities({
        project_id: this.project.id, id:this.notification.id, activities: this.notification.activities,
    }).then(_ => {
        this.$notify({ type: 'success', title: 'Activitati', message: 'Activitatea a fost adaugata cu succes!'});
    });
},

Datele le afisez pe ecran sub forma unui tabel, ceva de genul:

<el-table :data="notification.activities"> ..etc ..etc </el-table>

In componenta .VUE: notification.activities sunt datele modificate de mine in tabela data_notifications si mai am si initial.activities care sunt datele originale nemodificate preluata din tabela initiala.

Pot oferi si o suma modica de bani celui care ma ajuta cu o idee/sfat.
Multumesc mult.

Pai ar trebui sa fie simplu: folosesti axios.js ca sa faci request HTTP GET catre baza de date:
axios.get('http://localhost…")
.then(({ data }) => {
this.notification = data })

In felul asta primesti din DB informatiile ce doresti sa le afisezi in UI.

oO
o sa presupun ca db-ul ala e mysql si-i lasat pe portul implicit. asta inseamna ca ar trebui sa faci request spre http://localhost:3306. nu prea vad sensul protocolului http, dar nu m-am jucat prea mult cu axios. o fi facand niste magie in spate. nush, nu lucrez prea mult in go.

@Ekors, in db poti sa salvezi doar campurile modificate. sau salvezi de doua ori, odata in original si odata cu modificarile (poti dupa aia un diff pe ambele obiecte sa vezi ce s-a schimbat). poti salva originalul si dupa ai faci diff cu obiectul propriu zis. abordari sunt, depinde de situatie.

ps: as merge pe cu totul alta structura pt tabela de notificari.

Alex, nu prea inteleg la ce te referi :wink:
Axios.js e libraria standard pentru req http care sunt de asemenea standard in Vue.js. (nu inteleg ce ai vrut sa zici cu go).

Deci, Vue.js - client js framework - interogheaza backend-ul (server) si cere datele din db. Face acest lucru cu axios. Db-ul raspunde, trimite datele, axios le preia si cu datele respective faci update la UI.

E basic stuff.

Nu stiu daca m-am facut inteles, componenta functioneaza perfect, am si datele originale si cele din tabela notifications modificate, se preiau toate.

Problema e de afisare, nu stiu cum sa afisez doar ce s-a modificat facand o comparatie ceva intre cele 2 tabele MYSQL. Una unde se afla datele originale si a2-a unde am datele din notificare modificate.

Vrei sa faci ceva de genul asta?

Nu ca m-as pricepe la Laravel, dar cred ca asta te-ar putea ajuta

yep, si esti cat se poate de departe de adevar. probabil nici de eli5 n-ar fi buna explicatia ta.
poate ai vrut sa spui ca se face un request/cerere (marea majoritate a cazurilor http, mai rar alte protocoale, nu cred ca exista un caz unde faci request direct in serverul de db dintr-un client web). asta-i tot ce face clientul. ce se intampla pe server, ca se interogheaza o baza de date, ca citeste un cache, ca intreaba la nasa sau explodeaza o bomba pe undeva, e total irelevant, relevant e ce primeste inapoi. chestii de baza :wink:

/sarcasm
ps: cu go am fost ironic, ma bucur ca te-ai prins.
/sarcasm

@Ekors, incearca un array_diff_assoc intre notificare si obiectul original.

1 Like

@ alescx Cred ca " array_diff_assoc" e o optiunea ce imi trebuia, daca voi rezolva cu ea problema o sa-ti trimit un mesaj sa-mi dai o adresa PayPal unde sa-ti dau o mica atentie.

Alex, imi pare rau ca ai aceasta atitudine sarcastica, banuiesc ca te-a afectat aceasta perioada. Sper totusi ca iti vei reveni la un tonus normal, poate si la o relatie buna cu cei din jur, dunno, sper sa nu ai probleme serioase in familie.

E bine totusi sa retii ca acesta este un forum public si raspunsurile ar trebui sa fie cat se poate de elegante si discrete in ceea ce priveste sarcasmul si ironia :slight_smile:

peace!

2 Likes