Я хочу обновить данные в базе данных, связанной с ключом, используя laravel - PullRequest
0 голосов
/ 03 марта 2020

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

таблица базы данных

          setting table
          https://ibb.co/crg5H1R

Контроллер

              public function settingupdate(Request $request)
              {
                  $image = $request->file('logo_image');
                  $contact_number=$request->get('contact_number');
                  $email=$request->get('email');
                  $location=$request->get('location');
                  $facebook=$request->get('facebook');
                  $twitter=$request->get('twitter');
                  $linkedin=$request->get('linkedin');  

                  $extension = $image->getClientOriginalExtension();  
                  Storage::disk('cms')->put($image->getFilename() . '.' . $extension, 
                  File::get($image));
                  $content = new Settings;
                  $content->image = $image->getFilename() . '.' . $extension;

                  $check = Settings::where('key', $content->id)
                      ->update(['value' => $content->image,
                                'value'=>$contact_number,
                                'value'=>$email,
                                'value'=>$location,
                                'value'=> $facebook, 
                                'value'=> $twitter,
                                'value'=> $linkedin]);

                return back()->with('success', 'Setting Successfully updated')
                             ->with('path', $check);

             }

HTML просмотр

               <form method="post"  action="{{route('update.setting')}}"   >     
                @csrf
                    <div class="card-box">
                    <div class="panel panel-heading">
                    <h3>Update Settings</h3>
                    </div>        
                     <div class="col-lg-5">
                     <div class="mt-3">
                     <input type="file" name="logo_image" class="dropify"  />
                    </div>
                    </div>
                    <div class="row">
                    <div class="col-lg-5 mt-3">
                     <div class="group-form">
                     <label>Contact Number*</label>
                    <input type="text" name="contact_number"     class="form-control" >
                    </div>
                    </div>   
                    <div class="col-lg-5 mt-3">
                    <div class="group-form">
                    <label>Contact Email *</label>
                    <input type="email" name="email" class="form-control" >
                    </div>
                    </div>  
                    <div class="col-lg-10 mt-3">
                    <div class="group-form">
                    <label>Location *</label>
                    <input type="text" name="location" class="form-control" >
                    </div>
                    </div>  

                    <div class="col-lg-5 mt-3">
                    <h3> Social Links:</h3>
                    <div class="group-form">
                    <label>Facebook *</label>
                    <input type="text" name="facebook" class="form-control" >
                    </div>
                    </div> 
                    <div class="col-lg-5 mt-5">
                    <div class="group-form">
                    <label>Twitter *</label>
                    <input type="text" name="twitter" class="form-control" >
                    </div>
                    </div> 
                    <div class="col-lg-6 mt-3">
                    <div class="group-form">
                    <label>Linkedin *</label>
                    <input type="text" name="linkedin" class="form-control" >
                    </div>
                    </div> 
                    <div class="col-lg-7 mt-3">
                    <div class="group-form ">  
                    <button type="submit" id="btnsubmit" class="btn btn-danger waves-effect 
                     waves-light col-lg-2">Save</button>
                    </div>
                    </div> 
                    </div>   
                    </div> <!-- end card-box -->
                    </form>
                    </div>
                    </div>
                    </div>
                    </div>

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Если вы хотите использовать файл в вашей форме, вы должны использовать enctype = "multipart / form-data" в теге формы. Например:

<form method="post"  action="{{route('update.setting')}}" enctype="multipart/form-data"  >
    <!-- your codes -->
</form>

Этот код неправильный :

update(['value' => $content->image,
            'value'=>$contact_number,
            'value'=>$email,
            'value'=>$location,
            'value'=> $facebook, 
            'value'=> $twitter,
            'value'=> $linkedin]);

, поскольку вы используете значение для каждого поля.

Также Вы можете использовать этот код в своем контроллере:

$img = $request->file('logo_image');

try{
    $setting = new Setting();
    $setting->email = $request->email;    // $setting->email : email is your field name in DB
    $setting->location = $request->location;
    $setting->facebook = $request->facebook;
    $setting->twitter = $request->twitter;
    $setting->linkedin = $request->linkedin;
    $setting->contact_number= $request->contact_number;
    if (isset($img)) {
        if (!file_exists('file/' . $id)) {
            mkdir('storage/file/' . $id, 0777, true);
        }
        $currentDate = Carbon::now()->toDateString();
        $imageName = $currentDate . '-' . uniqid() . '.' . $new->getClientOriginalExtension();
        $new->move('file/' . $id, $imageName);
        $setting->image=$imageName;
    }
    $setting->save();


    return back()->with('success', 'Setting Successfully updated');
}catch(\Exception $e){
    Log::error($e); //use Illuminate\Support\Facades\Log;
    return back()->with('error', 'error text');
}

И использовать защищенный $ fillable в своей модели .

Удачи.

0 голосов
/ 03 марта 2020

Я думаю, что в вашей таблице настроек вы должны добавить еще 1 поле "тип". после этого вы можете запросить все настройки и l oop его. Пока вы l oop, вы можете сравнить ключ и обновить его. Я прикрепил код ниже:

    public function settingupdate(Request $request) 
    {

        $settings = Settings::all();
        foreach($settings as $setting) {
            // check if request have same key in settings table
            if ($request->has($setting->key)) {
                // if setting is image like LOGO, BACKGROUND_IMAGE etc
                if($setting->type == 'image') {
                    $image = $request->file($setting->key);
                    $extension = $image->getClientOriginalExtension();  
                    Storage::disk('cms')->put($image->getFilename() . '.' . $extension, 
                    File::get($image));

                    $setting->value = $image->getFilename() . '.' . $extension;
                } else {
                    // type might be string or number etc
                    $setting->value = $request[$setting->key];
                }

                $setting->save;
            }
        }

        return back()->with('success', 'Setting Successfully updated')->with('path', $check);
    }

Вы также можете использовать транзакцию БД для мульти сохранения. Вы можете читать больше Laravel Документы .

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