简体   繁体   English

Laravel 8 动态相关输入

[英]Laravel 8 Dynamic Dependent Input

it's been a while since I stuck in this problem.我陷入这个问题已经有一段时间了。 So I want to make a dynamic selection, when I select a nis (student_id) then the column nama (name) is filled with the student name.所以我想做一个动态选择,当我 select a nis (student_id) 然后列 nama (name) 填充学生姓名。

Input form输入形式输入形式

Output i want Output 我要输出

method create方法创建

public function create()
{
    return view('admin.counseling.create', [
        'title' => 'Tambah Bimbingan dan Konseling',
        'students' => Student::all()
    ]);
}

create_blade.php create_blade.php

                  <form action="/admin/counseling/store" method="post" enctype="multipart/form-data">
                    @csrf
                    <div class="card">
                      <div class="card-body">
                        <div class="row">
                          <div class="col-md-12">
                            <div class="form-group">
                              <label>Nomor Induk Siswa</label>
                              <select name="nis" required class="form-control" id="nis">
                                <option value="0" disabled="true" selected="true">-Pilih-</option>
                                @foreach($students as $student)
                                  <option value="{{$student->id}}">{{$student->nis}}</option>
                                @endforeach
                              </select>
                            </div>
                            <div class="form-group">
                              <label>Nama</label>
                              <input type="text" class="form-control" name="name" required />
                            </div>
                          </div>
                        </div>
                        <div class="row">
                          <div class="col text-right">
                            <button
                              type="submit"
                              class="btn btn-success px-5"
                            >
                              Simpan
                            </button>
                          </div>
                      </div>
                    </div>
                  </form>

I have watched and read some questions with similar problems, and yet I still didn't get it我已经看过并阅读了一些有类似问题的问题,但我仍然没有明白

UPDATE My method in my controller在我的 controller 中更新我的方法

public function find_nis(Request $request)
{
    $data = Student::find($request->id); //Counseling::with('student', 'student.student_class')->where('student_id', $request->id)->first();
    return response()->json(['view' => view('admin.counseling.create', ['data' => $data])->render()]);
}

My Ajax in create.blade.php我的 Ajax 在 create.blade.php

<script type="text/javascript">
  $(document).ready(function (){

      $(document).on('change','.student_nis',function () {

            var student_id = $(this).val();

            var a = $(this).parent();
            console.log(student_id);
            var op="";
            $.ajax({
              type      : 'GET',
              url       : '{!! URL::to('find_nis') !!}',
              data      : 'id=' + student_id,
              success:function(data){
                console.log(data);
                a.find('.student_name').val(data.name);
              },
              error:function(){

              }
            });

        });

  });
</script>

My Route我的路线

Route::get('/admin/counseling/find_nis', [CounselingController::class, 'find_nis'])->name('find_nis');

this is output in my browser console when i select nis 1212这是 output 在我的浏览器控制台中,当我 select nis 1212 在此处输入图像描述

i think for getting response from DB without refresh page you should use ajax, post student_id with ajax to Controller get username from DB and return your view like this: in your blade:我认为要在没有刷新页面的情况下从 DB 获得响应,您应该使用 ajax,将 student_id 与 ajax 发布到 Controller 从 DB 获取用户名并返回您的视图,如下所示:在您的刀片中:

first you must set this meta tag inside of:首先,您必须在以下位置设置此元标记:

<meta name="csrf-token" content="{{ csrf_token() }}">

then config and post your data with ajax like this:然后使用 ajax 配置并发布您的数据,如下所示:

<script type="text/javascript">
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        var studentId = $("input[name=student]").val();

                $.ajax({
                    xhrFields: {withCredentials: true},
                    type:'POST',
                    url:"{{ route('getStudentInfo') }}",
                    data:{studentId:studentId},
                    success:function(data){
                        $('html').html(data.view);
                    }
                });
</script>

in your Controller inside of getStudentInfo():在你的 Controller 里面的 getStudentInfo():

$student = DB::table('user')->find($studen_id);
$username = $student->username;
return response()->json(['view' => view('admin.counseling.create', compact('username'))->render()]);

Here the working solutions这里的工作解决方案

*Route *路线

Route::get('/admin/counseling/find_student', [CounselingController::class, 'find_nis'])->name('find_student');

*Controller *控制器

public function create()
{
    return view('admin.counseling.create', [
        'title' => 'Tambah Bimbingan dan Konseling',
        'students' => Student::all(),
        'problems' => Problem::all()
    ]);
}

public function find_nis(Request $request)
{
    $student = Student::with('student_class')->findOrFail($request->id);
    return response()->json($student);
}

*blade *刀

<div class="container-fluid mt--7">
    <div class="mt-8">
        <div class="dashboard-content">
            <div class="row">
                <div class="col-12">
                  @if ($errors->any())
                      <div class="alert alert-danger">
                          <ul>
                              @foreach ($errors->all() as $error)
                                  <li>{{ $error }}</li>
                              @endforeach
                          </ul>
                      </div>
                  @endif
                  <form action="/admin/counseling/store" method="post" enctype="multipart/form-data">
                    @csrf
                    <div class="card">
                      <div class="card-body">
                        <div class="row">
                          <div class="col-md-12">
                            <div class="form-group">
                              <label>Nomor Induk Siswa</label>
                              <select name="nis" required class="form-control" id="nis">
                                <option value="0" disabled="true" selected="true">-Pilih-</option>
                                @foreach($students as $student)
                                  <option value="{{$student->id}}">{{$student->nis}}</option>
                                @endforeach
                              </select>
                            </div>
                            <div class="form-group">
                              <label>Nama</label>
                              <input type="text" class="form-control" name="student_name" id="student_name" disabled required/>
                            </div>
                            <div class="form-group">
                              <label>Kelas</label>
                              <input type="text" class="form-control" name="student_class_name" id="student_class" disabled required/>
                            </div>
                            <div class="form-group">
                              <label>Permasalahan</label>
                              <div class="row">
                                <div class="col">
                                  @foreach ($problems as $problem)
                                  <div class="form-check">
                                    <input type="checkbox" id="" name="problem_name[]" value="{{ $problem->name }}">
                                    <label class="fs-6 fw-light">{{ $problem->name }}</label>
                                  </div>
                                  @endforeach
                                </div>
                              </div>
                            </div>
                            <div class="form-group">
                              <label>Bobot Permasalahan</label>
                              <select name="priority" required class="form-control" id="nis">
                                <option value="null" disabled="true" selected="true">-Pilih-</option>
                                <option value="1">Normal</option>
                                <option value="3">Penting</option>
                                <option value="5">Sangat Penting</option>
                              </select>
                            </div>
                          </div>
                        </div>
                        <div class="row">
                          <div class="col text-right">
                            <button
                              type="submit"
                              class="btn btn-success px-5"
                            >
                              Simpan
                            </button>
                          </div>
                      </div>
                    </div>
                  </form>
                </div>
            </div>
        </div>   
    </div>
</div>

*ajax *阿贾克斯

<script type="text/javascript">
  $(document).ready(function (){

      $(document).on('change', '#nis', function() {

            var student_id = $(this).val();

            var a = $('#student_name').parent();

            $.ajax({
              type      : 'GET',
              url       : '{{ route('find_student') }}',
              data      : 'id=' + student_id,
              success:function(data){
                a.find('#student_name').val(data.name);
              },

              error:function(){

              }
            });

      });

      $(document).on('change', '#nis', function() {

            var student_id = $(this).val();

            var a = $('#student_class').parent();

            $.ajax({
              type      : 'GET',
              url       : '{{ route('find_student') }}',
              data      : 'id=' + student_id,
              success:function(data){
                a.find('#student_class').val(data.student_class.name);
              },

              error:function(){

              }
            });

      });

  });
</script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM