Как получить только обновленную строку из базы данных и сделать приложение более эффективным - PullRequest
0 голосов
/ 19 февраля 2019

Я создаю CRUD-приложение laravel / vue.js, и сейчас у меня все отлично, но меня беспокоит качество моих запросов к базе данных после обновления данных.

Я использую getAllData() каждый раз, когда я обновляю строку в базе данных.Теперь, когда у меня есть несколько записей в базе данных, не проблема каждый раз запрашивать сервер и отображать новый список в vue, но когда у меня будет несколько тысяч строк, это сделает мое приложение медленным и тяжелым.

Теперь я обновляю базу данных следующим образом:

Это часть моей функции обновления vue.js:

updateStatus: function(id){

    var index = _.findIndex(this.rows,["id",id]);

    if (this.rows[index].pay_status=="waiting"){
       axios.put("http://127.0.0.1:8000/api/payments/"+id
       ,{pay_status:"payed"}).then((response)=>{

       this.getAllData();         
}

Это my vue.js getAllDataфункция:

getAllData: function(){
        axios.get("http://127.0.0.1:8000/api/payments").then((response)=>{         
        this.rows = response.data;
        });       
}

и мой PaymentsController:

namespace App\Http\Controllers;

use App\Payments;
use App\Suppliers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Faker\Generator;

class PaymentsController extends Controller
{
  public function index()
  {         
    $payments = Payments::with('suppliers')->get();
    return response($payments, Response::HTTP_OK);
  }
}

моя функция обновления:

public function update(Request $request, $id)
{
    $payments = new Payments();
    payments::where('id', $id)->update($request->all());
}

Есть ли способ сделать обновление более эффективным способом, например, получить только обновленную строку из базы данных и поместить ее в существующий объект со строками?А может, мне не стоит об этом беспокоиться?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Если вам нужны обновленные строки для определенного периода времени.

Также вы можете сделать одну вещь.Когда пользователь обновляет строку, вы можете сохранить уникальный идентификатор в новой таблице, и вы можете получить данные через этот идентификатор.и затем вы можете удалить этот идентификатор из новой таблицы, когда вам не нужны последние обновленные данные.

Во время обновления строки с помощью идентификатора

  1. вставить идентификатор в новую таблицу.
  2. обновить запись.
  3. еслинужна только обновленная запись >> используйте внутренние условия согласно требованию >> Извлечение идентификатора из новой таблицы объединяется с основной таблицей.
  4. , когда вам не нужна эта последняя обновленная запись.Удалить записи из новой таблицы.>> использовать внутренние условия согласно требованию >> получить из основной таблицы.
0 голосов
/ 19 февраля 2019

Как сказал @Ohgodwhy, я меняю свой код следующим образом, и теперь он работает нормально.

функция обновления

public function update(Request $request, $id)
{
    $payments = new Payments();
    payments::where('id', $id)->update($request->all());
    return response(payments::where('id', $id)->get(), Response::HTTP_OK);
}

axios

    updateStatus: function(id){

           var index = _.findIndex(this.rows,["id",id]);

            if (this.rows[index].pay_status=="oczekuje"){
                axios.put("http://127.0.0.1:8000/api/payments/"+id,{pay_status:"zapłacono"}).then((response)=>{
                this.rows[index].pay_status=response.data[0].pay_status;
                this.waitingInvoices = this.countInvoices();
                this.toPay = this.calculatePayment();


            }); 
            } else if (this.rows[index].pay_status=="zapłacono"){
               axios.put("http://127.0.0.1:8000/api/payments/"+id,{pay_status:"oczekuje"}).then((response)=>{
               this.rows[index].pay_status=response.data[0].pay_status;
               this.waitingInvoices = this.countInvoices();
               this.toPay = this.calculatePayment();

            }); 
            }
    },
0 голосов
/ 19 февраля 2019

Не видя вашей логики:

Ваш контроллер может вернуть запись:

return response(['payment' => $payment], Response::HTTP_OK);

Ваш метод axios может наблюдать этот ответ и затем выполнить замену индекса (точно так же, как вы это сделали).при получении индекса ранее)

.then((response) => {
    const { payment } = response.data;

    this.items[index] = payment;
})

Пока items был создан в data как [], тогда это можно наблюдать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...