Laravel - Как динамически получать минимальные и максимальные даты - PullRequest
0 голосов
/ 04 февраля 2020

Я использую Laravel -5,8 для веб-приложения. В проекте я использую поля ввода формы Dynami c, как показано ниже:

У меня есть две таблицы: projects и project_details

У меня есть два класса моделей

Project ( проекты)

protected $fillable = [
      'project_type',
      'project_title',
      'start_date',
      'end_date',
  ];

ProjectDetail (project_details)

protected $fillable = [
      'project_id',
      'description',
      'activity',
  ];

У проекта есть start_date и end_date, в то время как ProjectDetail имеет activity_start_date и activity_end_date.

Контроллер

  public function create()
  {
    return view('appraisal.appraisal_goals.create');
  }

public function store(StoreProjectRequest $request)
{
    $activityStartDate = Carbon::parse($request->activity_start_date);
    $activityEndDate = Carbon::parse($request->activity_end_date);
     try {
        $project = new Project();
        $project->project_type                  = $request->project_type;
        $project->project_title             = $project_title;
        $project->employee_id                   = $request->employee_id;
        $project->weighted_score            = $request->weighted_score;
        $project->goal_description          = $request->goal_description;
        $project->start_date                    = ;
        $project->end_date                  = ;
        $project->save();

    foreach ( $request->activity as $key => $activity){
        $projectdetail = new ProjectDetail();
        $projectdetail->description             = $request->description[$key];
        $projectdetail->activity                    = $request->activity[$key];
        $projectdetail->activity_start_date    = $activityStartDate[$key];
    $projectdetail->activity_end_date     = $activityEndDate[$key];
        $projectdetail->project_id                  = $goal->id;
        $projectdetail->save();
     }
        Session::flash('success', 'Project is created successfully');
        return redirect()->route('projects.index');
    } catch (Exception $exception) {
        Session::flash('danger', 'Project creation failed!');
        return redirect()->route('projects.index');
  }
}

просмотр

<div class="row">
    <div class="col-md-12">
    <!-- general form elements -->
      <form  method="POST" action="{{route('projects.store')}}">
      @csrf
   <div class="card-body">
    <div class="form-body">
    <div class="row">  
        
      <div class="col-12 col-sm-6">
        <div class="form-group">
          <label class="control-label"> Project Type:<span style="color:red;">*</span></label>
          <input  type="text" name="project_type"  class="form-control">
        </div>
      </div>
        
      <div class="col-12 col-sm-6">
        <div class="form-group">
          <label class="control-label"> Project Title:<span style="color:red;">*</span></label>
          <input  type="text" name="project_title"  class="form-control">
        </div>
      </div>

<div class="col-sm-12">
        <table class="table table-bordered">
                    <thead>
                    <tr>
                        <th scope="col">Activity<span style="color:red;">*</span></th>
                        <th scope="col">Description<span style="color:red;">*</span></th>
                        <th scope="col">Activity Start Date</th>
                         <th scope="col">Activity End Date</th>
                        <th scope="col"><a class="addRow"><i class="fa fa-plus"></i></a></th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                        <td><input type="text" name="activity[]" class="form-control activity" ></td>
                        <td><input type="text" name="description[]" class="form-control description" ></td>
                        <td><input type="date" name="activity_start_date[]" class="form-control activity_start_date" ></td>
                        <td><input type="date" name="activity_end_date[]" class="form-control activity_end_date" ></td>
                        <td><a class="btn btn-danger remove"> <i class="fa fa-times"></i></a></td>
                     </tr>
                    </tbody>
                </table>
      </div>
    </div>
  </div>          
<div class="card-footer">
  <button type="submit" class="btn btn-primary">Save</button>
  <button type="button" onclick="window.location.href='{{route('project.index')}}'" class="btn btn-default">Cancel</button>
</div>           
   
</form>
</div>
<!-- /.card -->

javascript

<script type="text/javascript">
$(document).ready(function(){
    $('.addRow').on('click', function () {
var numRows = $('.activity').length

    function addRow() {
        var addRow = '<tr>\n' +
' <td><input type="text" name="activity[]" class="form-control activity" ></td>\n' +
'   <td><input type="text" name="description[]" class="form-control description" ></td>\n' +
'   <td><input type="date" name="activity_start_date[]" class="form-control activity_start_date" ></td>\n' +
'   <td><input type="date" name="activity_end_date[]" class="form-control activity_end_date" ></td>\n' +
'  <td><a   class="btn btn-danger remove"> <i class="fa fa-times"></i></a></td>\n' +
'    </tr>';
        $('tbody').append(addRow);
        addRemoveListener();
    };
   addRemoveListener();
 });

function addRemoveListener() {
$('.remove').on('click', function () {
    var l =$('tbody tr').length;
    if(l==1){
        alert('you cant delete last one')
    }else{

        $(this).parent().parent().remove();

    }

   });
 }

Когда форма будет отправлена, я хочу, чтобы приложение:

  1. получило минимум всех Activity_start_date в ProjectDetail и установите значение start_date в Project и сохраните в таблице проектов (обновите таблицу проектов).

  2. получите максимум всех activity_end_date в ProjectDetail и установите для него значение end_date в Project и сохраните в таблице проектов (обновите таблицу проектов).

Как мне этого добиться?

Спасибо

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