可以在同一视图中显示和编辑数据库记录吗?

时间:2018-11-27 14:39:13

标签: php laravel eloquent

我有一个简单的管理员视图,其中显示了所有可能的任务。我想让管理员可以看到所有任务,并可以在同一视图中编辑每个任务。我有一个表格,其中包含所有任务数据和每个记录的编辑按钮。

每个任务的编辑部分应显示在表格的右侧。

我不确定在单击该记录的编辑按钮后如何将每个正确的任务项添加到视图的编辑部分

有可能只用laravel和blade来做到吗?

我的观点

@extends('layouts.app')
@section('content')

<div class="jumbotron text-center">
    <h2>ADMIN PANEL</h2>
</div>
<div class="container">
    <div class="row" >
        <div class="col-md-7">
            <table class="table">
            <thead>
                <tr>
                <th scope="col">#</th>
                <th scope="col">Name</th>
                <th scope="col">Price</th>
                <th scope="col">Actions</th>
                </tr>
            </thead>
            <tbody>
            @foreach($quests as $questIndex => $quest)
                <tr>
                <th scope="row">{{($questIndex + 1)}}</th>
                <td>{{$quest->name}}</td>
                <td>No price set</td>
                <td><a class="btn btn-outline-dark mr-2" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">Edit</a><a class="btn btn-outline-dark"> Delete</a></td>
                </tr>
            @endforeach  
            </tbody>
            </table>
            {{$quests->links() }}
        </div>
        // edit the quest here 
        <div class="col-md-4 collapse" id="collapseExample">
             <p> Edit the quest </p>
        </div>
    </div>
</div>
@endsection

我的控制器

class AdminController extends Controller
{
    public function index()
    {
        $quests = Quest::simplePaginate('20');
        return view('admin.index', compact('quests'));
    }
}

2 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,有几种方法可以做到这一点。

方法1:

在不使用ajax的情况下使用一条简单的路线(在我看来,这是一种不好的做法)

Routes.web

Route::post("editQuest", "MyControllerQuest@editQuest")->name("editQuest");

*。blade.php

然后,您将按照注释中的说明打开模态,然后有一个名为Make changes的按钮。

<form action="{{ route("editQuest") }}">
  ...
  <input type="hidden" name="quest_id" value=""> // You would need to update this value whenever a user clicks on the button to edit the record with the id of the quest
  <button type="submit">Make Changes</button>
</form>

然后在“ MyControllerQuest”中进行更改并将用户重定向到上一页。

方法2: 您可以进行ajax调用以进行更改。我不会针对该主题写完整的答案,因为这超出了问题的范围,但是您可以点击此链接(Google的第一个链接)Laravel and ajax

方法2的优点: 通过ajax进行更改,您无需再次加载整个页面,从而节省了服务器不必获取要分页的20条记录的时间

编码愉快!

答案 1 :(得分:0)

您只需在刀片中检查 $ quests 的值,然后从两个函数(编辑和索引)中调用同一视图,例如

@extends('layouts.app')
@section('content')

<div class="jumbotron text-center">
 <h2>ADMIN PANEL</h2>
</div>
<div class="container">
  <div class="row" >
    <div class="col-md-7">
        <table class="table">
        <thead>
            <tr>
            <th scope="col">#</th>
            <th scope="col">Name</th>
            <th scope="col">Price</th>
            <th scope="col">Actions</th>
            </tr>
        </thead>
        <tbody>
          @if( isset($quests) && count($quests) )
           @foreach($quests as $questIndex => $quest)
            <tr>
            <th scope="row">{{($questIndex + 1)}}</th>
            <td>{{$quest->name}}</td>
            <td>No price set</td>
            <td><a class="btn btn-outline-dark mr-2" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">Edit</a><a class="btn btn-outline-dark"> Delete</a></td>
            </tr>
        @endforeach  
          @else
            //content for index page
          @endif
        </tbody>
        </table>
        {{$quests->links() }}
    </div>
    // edit the quest here 
    <div class="col-md-4 collapse" id="collapseExample">
         <p> Edit the quest </p>
    </div>
</div>
        </div>
  @endsection

或者,如果想要除索引页面的表以外的其他内容,则可以在表之前设置该条件。

希望这会有所帮助