Как обновить базу данных по значению флажка laravel

Как обновить базу данных по значению флажка laravel

27.11.2019 09:05:37 Просмотров 68 Источник

Я загружаю флажки из базы данных, когда они проверяются или нет,

<div class="row">
    <div class="col-xs-12">
        <div class="form-group">

            @php
                $json = $orders->data;
                $json = json_decode($json, true);
                $products = $json['order_info']['products'];

                $data = '';

                    foreach ($products as $hitsIndex => $hitsValue) {
                        $data .= $hitsValue['type']. ', ';
                    }
                $data = rtrim($data, ', ');

                $agosProducts = Utility::constant('agos_products1');
            @endphp

            {{Html::validation($orders, 'product')}}
            <label for="products" class="control-label">{{Translator::transSmart('app.Products', 'Products')}}</label><br><br>

            @foreach($agosProducts as $product)

                <label class="control-label "for="{{ $product['type'] }}">
                    <input id="{{ $product['type'] }}" name="{{ $product['type'] }}" type="checkbox" value="{{ $product['type'] }}"
                           @foreach ($products as $hitsIndex => $hitsValue)
                                @if(in_array($hitsValue['type'], $product)) checked=checked @endif
                           @endforeach
                    >
                    {{ $product['name'] }}
                </label>
                <br>

            @endforeach

        </div>
    </div>
</div>

Теперь я хочу обновить базу данных по значению флажка.

Например, если сказать, что я загружаю флажок 1, как проверено из базы данных, и теперь он снят, мне нужно обновить его в базе данных.

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

$chks = array('multicolor','resizable','showRuler','namesNumbersEnabled');
foreach ($chks as $chk) {
   $product->setAttribute($chk, (Input::has($chk)) ? true : false);
}

Это мой объект json сохранить в столбце данных

{"user_token":"ad48c412-3866-4ac9-adf6-3328911ae46c",
"order_info": 
{"order_id":"CGC12345678","company_id":32,"price":1000.5,"currency":"MYR",
"products":[
{"type":"HR_ECLAIM","name":"HREClaim","is_fixed_price":true,"price":500.5,"currency":"MYR"},
{"type":"HR_ELEAVE","name":"HRELeave","is_fixed_price":true,"price":500,"currency":"MYR"}
],
"total_invoices":200,"total_staffs":80},"url":"https://drive.google.com/open?id=1Is6QsnuMLu9ZIpqeEzR2O2Ve1wUyF92aVCg55kWsOgc"}

я загружаю [order_info][products][type] как проверенные продукты, в то время как я загружаю все продукты из файла env. Мне нужно только сохранить отмеченные флажком продукты в БД.

Может кто-нибудь мне поможет?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104367677_59063999
Вам не нужно беспокоиться о предыдущем статусе флажка во время обновления, если кто-то сохраняет форму, то только выбранные значения устанавливают true в базе данных, а все остальные будут ложными.
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104367698_59063999
Поэтому, когда вы переходите на ту же страницу, эти выбранные значения должны отображаться как выбранные, а другие-нет.
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104367788_59063999
@DhavalPurohit в БД флажок 1 установлен и флажок 2 и флажок 3 значения не находятся в БД, потому что они не проверяли. Во время редактирования я сделал флажок 2 также установлен и сделал флажок 1 снят. как я обновляю это в БД? Только нужно сохранить checkbx 2 значения в БД при удалении флажка 1 значения из БД
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104367842_59063999
Тогда, пожалуйста, будьте конкретны, как вы храните данные в базе данных ? это в JSON или в Столбцах.?
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104367987_59063999
@DhavalPurohit я обновить вопрос с JSON-объект
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104368396_59063999
@ DhavalPurohit массив
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104368496_59063999
Хорошо, тогда почему это строка в JSON, о которой Вы упомянули здесь?
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104368812_59063999
@DhavalPurohit sry я не понял?
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104369347_59063999
@DhavalPurohit это для одного флажка проверено. {"тип":"HR_ECLAIM","имя":"HREClaim","is_fixed_price":правда,"цена":500.5,"валюты":"мир"}. другие сведения о получении из файла env
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104369388_59063999
если HR_ECLAIM не установлен выше {} должен быть удален, и если я проверил FIN_REP new {} должен сохранить в БД
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104369411_59063999
{"тип":"HR_ECLAIM","имя":"HREClaim","is_fixed_price":правда,"цена":500.5,"валюты":"мыр"} тип я определять это проверено или нет в колонке файл
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104369441_59063999
Хорошо @LearnwithPanda даст решение после обеденного перерыва.
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104369478_59063999
Ладно @DhavalPurohit
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104371193_59063999
как показывает весь код, что я понимаю, вы добавляете и удаляете продукты на флажке, проверенном и удаленном, так почему бы вам просто не удалить все, что есть до обновления, и просто добавить то, что в настоящее время проверено.
https://stackoverflow.com/questions/59063999/how-to-update-database-base-on-laravel-checkbox-value#comment104371708_59063999
@DhavalPurohit oky плохо проверить и пусть u knw обновление

Ответы - Как обновить базу данных по значению флажка laravel / How to update database base on laravel checkbox value

Является ответом!
Learn with Panda

06.12.2019 12:56:14

Это полное рабочее решение, которое я сделал для моего вопроса!

public function edit($id, $attributes){

        $orders = (new Agos())->load($id);
        $json = $orders->data;
        $json = json_decode($json);

        $checkedit= $attributes['check_list'];

        if (is_array($checkedit) || is_object($checkedit))
        {
            foreach($checkedit as $chked1){

                $exists = false;
                foreach($json->products as $key => $val)
                {
                    // update if products exists
                    if($val->type == $chked1) {
                        $val->status = 'true';
                        $exists = true;
                    }

                    if(array_key_exists('status', $val)) {}
                    else{ $val->status = 'false';}

                }

                if($chked1 == 'FIN_REPORTING')
                {
                    $name = 'Finance reporting & book keeping';
                }
                elseif ($chked1 == 'FIN_ADVISORY')
                {
                    $name = 'Finance Advisory';
                }
                elseif ($chked1 == 'PAYROLL_HRDB')
                {
                    $name = 'PAYROLL_HRDB';
                }
                elseif ($chked1 == 'HR_ELEAVE')
                {
                    $name =   'HR E-Leave';
                }
                else
                {
                    $name = 'HR E-Claim';
                }

                //if products not exists add new products
                if(!$exists) {

                    $newproduct = new \stdClass();
                    $newproduct->type = $chked1;
                    $newproduct->name = $name;
                    $newproduct->is_fixed_price = false;
                    $newproduct->currency = "MYR";
                    $newproduct->status = "true";
                    array_push($json->products, $newproduct);
                }
            }
        }

        //remove all products that have status = false
        foreach($json->products as $index => $product) {
            if ( $product->status == "false") {
                unset($json->products[$index]);
            }
        }
        $json->products = array_values($json->products);
        json_encode($json, JSON_PRETTY_PRINT);


        //remove status element from products
        foreach($json->products as $index => $product) {

                unset($product->status);

        }
        $json->products = array_values($json->products);
        json_encode($json, JSON_PRETTY_PRINT);

        $json->google_drive_url= $attributes['data'];
        $json->remark= $attributes['remark'];
        $json->status= $attributes['status'];
        $json->total_invoices= $attributes['total_invoices'];
        $json->total_staffs= $attributes['total_staffs'];
        $json1 = json_encode($json);

        $status = $attributes['status'];
        $total_price = str_replace(',','', $attributes['total_price']);

        DB::table('orders')
            ->where('id', $id)
            ->update(['data' => $json1,'status' => $status, 'price' => $total_price]);

    }
Закрыть X