[Day25] 第二十五章-新增空白的point表单 (跨资料查询还有对应细节)

前言

昨天我们完成了point简单的read 跟route model controll等
今天我们在进入评分前有一件很重要的事情要先做
也就是说point表单
比如说roni 对 amdin使用者的化学技能评分前

我们需要先判断是否有评分过!?

如果有评分过我们的api要改成patch也就是更新分数
如果没有评分过! 那我们要新增一个point的纪录表来记录我们的评分

这些是非常重要喔
那要如何判断呢
user_id(技能拥有者)
judge_user_id(评分者ID)
skill_id(技能ID)

也就是说我们要茶道第一个是技能拥有者是谁?然後技能是哪种?还有现在评分的人是谁?
这件事情在做对应是非常重要的一件事喔!
新手可能会被这这种逻辑搞到头昏眼花
/images/emoticon/emoticon06.gif

目标

  1. 建立好前端ajax
  2. 建立好一张新的point表单

实作

在前端views/point/index.blade.php中

<head>
  <!-- Scripts -->
  <script src="{{ asset('js/app.js') }}" defer></script>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"> </script>
  <!-- Styles -->
  <link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>

<body>
  <div>
    <table class="table table-bordered">
      <thead>
        <tr>
          <th>ID</th>
          <th>标题</th>
          <th>使用者ID</th>
          <th>技能评分</th>
        </tr>
      </thead>
      <tbody>
        @foreach($skills as $skill )
        <tr>
          <td>{{$skill->id}}</td>
          <td>{{$skill->title}}</td>
          <td>{{$skill->user_id}}</td>
          <td><button type="button" class="btn btn-primary" onclick="myFunction('{{$skill->id}}','{{$skill->user_id}}')">进入评分</button></td>
        </tr>
        @endforeach
      </tbody>
    </table>
  </div>
</body>

<script>
  function myFunction(skill_id, user_id) {
    var data = {
      skill_id,
      user_id
    }
    $.ajax({
        method: "POST",
        url: "/points",
        dataType: 'json',
        data
      })
      .done(function(msg) {
        console.log(msg)
      });
  }
</script>

我们要把skill_id跟持有者id传到後端在做表单控制

在button function中我们可以把两个参数带入
然後透过ajax把它送到後端

public function store(Request $request)
    {
        //
        $data  = $request->all();
        $user = Auth::user();
        $result = Point::query()
            ->where('user_id', '==', $data['user_id'])
            ->where('judge_user_id', '==', $user->id)
            ->where('skill_id', '==', $data['skill_id'])->get()->first();
        if (empty($result)) {
            $newpointdata = new Point;
            $newpointdata->user_id = $data['user_id'];
            $newpointdata->judge_user_id = $user->id;
            $newpointdata->skill_id = $data['skill_id'];
            $newpoint = $newpointdata->save();
            dd($newpoint);
            return $newpoint;
        }

        // return empty($result);
    }

这边要做的事情有两点
第一点我们要先查找是否已经有评分过了(也就是说我们要看评分表在不在)
如果不在我们就要进到if empty的环节来新增point表

验证结果

https://ithelp.ithome.com.tw/upload/images/20211010/2012105204sGedAKhk.png
确认api有成功

https://ithelp.ithome.com.tw/upload/images/20211011/201210520NAqaxYOdG.png
确认评分表有新增成功


<<:  DAY 27:Chain of Responsibility,将实作透过串串乐串起来

>>:  Day27:【技术篇】Webpack5 - Webpack 之运作流程

从 IT 技术面细说 Search Console 的 27 组数字 KPI (10) :连结 - 内部连结

连结即使是很重要的事,但似乎大部份的人只关心外站的反向连结,而却忽略内部的正向连结,事实上内部连结才...

STM32CubeMX专案配置详细教学,点亮LED

想在这纪录一下我使用STM32CubeMX的经验适合完全没用过的人,已经有开发经验的就不用看了,我第...

# Day26--要移花接木就是要rebase~

来聊聊rebase rebase本身就是两个字组成,「re+base」 实际在做的时候,我们大概可以...

DAY17: 实作提交表单的Post请求

学完Get请求後就不免要学一下Post请求了,在DAY15: HTTP GET请求的开头有提到,Ge...

Day 13 - PHP SDK: 查询订单状态

昨天 Day 12 介绍了 Sinopac PHP SDK 关於建立订单的部分,接着今天要介绍的是查...