首页 > 解决方案 > 创建页面以更改刀片中表中的数据时出错

问题描述

我创建了一个页面来实现从表中更改数据的功能,在我完成了视频教程中的所有操作后,我不知何故无法使用此页面,这是错误的文本:

Undefined variable: business

(我还附上了错误截图) https://i.stack.imgur.com/vs7Wj.png

我的控制器“BusinessController.php”:

<?php

namespace App\Http\Controllers;
use \App\Models\Business;
use Illuminate\Http\Request;

class BusinessController extends Controller
{
    public function index()
    {
        $business = \App\Models\Business::all();
        return view('business', compact('business'));
    }

    public function createbusiness()
    {
        return view('/createbusiness');
    }

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

    function delete($idd)
    {
        \DB::table('business')->where('idd',$idd)->delete();
        return redirect ('/business');
    }

    public function edit_function($idd)
    {
        \DB::select('select * from business where id = ?', [$idd]);
        return view ('/update',['business'=>$business]);
    }

    public  function store()
    {
        $business = new Business();
        $business->idd = request('idd');
        $business->name = request('name');
        $business->mail = request('mail');
        $business->website = request('website');
        $business->save();
        
        return redirect('/business');
    }
}

我的路线“web.php”:

<?php

    use App\Http\Controllers\UserController;
    use Illuminate\Support\Facades\Route;

    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */

    Route::get('/welcome', 'App\Http\Controllers\MainController@welcome');
    Route::get('/users', 'App\Http\Controllers\MainController@users');
    Route::get('/business', 'App\Http\Controllers\BusinessController@index');
    Route::post('/business', 'App\Http\Controllers\BusinessController@store');
    Route::get('/projects', 'App\Http\Controllers\ProjectsController@index');
    Route::post('/projects', 'App\Http\Controllers\ProjectsController@store');
    Route::get('/projects/create', 'App\Http\Controllers\ProjectsController@create');
    Route::get('/business/create', 'App\Http\Controllers\BusinessController@createbusiness');
    Auth::routes();
    Route::get('/delete/{idd}','App\Http\Controllers\BusinessController@delete');
    Route::get('click_edit/{idd}','App\Http\Controllers\BusinessController@edit_function');
    Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

我的观点“business.blade.php”:

@extends('layouts.layout')
@section('title')Бізнес@endsection
@section ('main_content')
    <h1>Бизнес</h1>
    <p>
    <table class="table table-dark">
            <thead>
              <tr>
                <th scope="col">ID</th>
                <th scope="col">Name</th>
                <th scope="col">Mail</th>
                <th scope="col">Website</th>
                <th scope="col">Edit</th>
                <th scope="col">Delete</th>
              </tr>
            </thead>
            <tbody>
                @foreach ($business as $singleBusiness)
                <tr>
                    <th scope="row">{{ $singleBusiness->idd}}</th>
                    <td>{{ $singleBusiness->name}}</td>
                    <td>{{ $singleBusiness->mail}}</td>
                    <td>{{ $singleBusiness->website}}</td>
                    <td><a href="/click_edit/{{ $singleBusiness->idd }}">
                     <button class="btn btn-success">Edit</button></a></td>
                    <td><a href="/delete/{{ $singleBusiness->idd }}">
       <button class="btn btn-danger btn-delete">Delete</button></a></td>
              </tr>
              @endforeach
            </tbody>
        </table>
        <a class="col-4 btn btn-outline-warning mr-3" href="/business/create">Додати Бізнес</a>
        </p>
@endsection

我对更新数据函数“update.blade.php”的看法:

@extends('layouts.layout')
@section('title')Головна сторінка@endsection
@section ('main_content')
 <h1>Update info</h1> 
<div class="container">
<div class="jumbotron">

 <form action="/update/{{ $business[0]->idd }}" method="post">
    {{ csrf_field() }}
        <div class="form-group">
            <label>Business Name</label>
            <input type="text" class="form-control" name="name" id="name" value="{{$business[0]->name}}" aria-describedby="emailHelp" placeholder="Enter new Business Name">
        </div>
        <div class="form-group">
            <label>Business Name</label>
            <input type="text" class="form-control" name="name" id="name" value="{{$business[0]->mail}}" aria-describedby="emailHelp" placeholder="Enter new Business Name">
        </div>
        <div class="form-group">
            <label>Business Name</label>
            <input type="text" class="form-control" name="name" id="name" value="{{$business[0]->website}}" aria-describedby="emailHelp" placeholder="Enter new Business Name">
        </div>
        <button type="submit" name="sumbit" class="btn btn-danger" style="width: 50%;">Update Data</button>

@endsection

标签: phplaraveldatatablesdatabase-tablelaravel-datatables

解决方案


正如@El_Vanja 已经写的那样,错误是你的edit_function. 那里的变量$business没有被定义,而是被使用;

public function edit_function($idd)
{
    \DB::select('select * from business where id = ?', [$idd]);
    
    // Here you use $business, but never declared it before
    return view ('/update',['business'=>$business]);
}

您可以做的是将返回值传递DB::select给变量$business

$business = \DB::select('select * from business where id = ?', [$idd]);

推荐阅读