【问题标题】:Call to a member function delete() on null / AdminHomeController.php line 26:在 null / AdminHomeController.php 第 26 行调用成员函数 delete():
【发布时间】:2017-02-16 16:04:44
【问题描述】:

使用 laravel 5.3 中的 multi_auth 尝试制作删除/编辑/更新按钮。

我试图从管理仪表板中删除用户,从用户表中检索信息。 实际上我的第一个问题是销毁函数。

这是我的销毁路线:

Route::get('{id}',[
    'as' => 'admin.destroy',
    'uses' => 'AdminHomeController@destroy'
]);

这是我的管理员控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\User;

class AdminHomeController extends Controller
{
    public function __construct()
    {
        $this->middleware('admin.user');
    }

    public function index()
    {
        $users = User::all();

        return view("admin-home")->with('users', $users);
    }

    public function destroy($id)
    {
        $users = User::find($id);
        $users->delete();

        Flash::error('El usuario ' . $users->name . '$ ha sido eliminado con exito!');
        return redirect()->route('admin-home');
    }
}

使用删除按钮查看:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="col-sm-offset-2 col-sm-8">
                @if (count($users) > 0)
                    <div class="panel panel-default">
                        <div class="panel-heading">
                            Todos los Usuarios
                        </div>
                        <div class="panel-body">
                            <table class="table table-striped user-table">
                                <thead>
                                    <th>Nombre:</th>
                                    <th>&nbsp;</th>
                                    <th>Email:</th>
                                    <th>&nbsp;</th>
                                    <th>Acciones:</th>
                                    <th>&nbsp;</th>
                                </thead>
                                <tbody>
                                    @foreach ($users as $user)
                                        <tr>
                                            <td>&nbsp;</td> 
                                            <td>{{ $user->name }}</td>  
                                            <td>&nbsp;</td> 
                                            <td>{{ $user->email }}</td> 
                                            <td>&nbsp;</td> 
                                            <td>    
                                                <a href="{{ route('users.destroy', $user->id) }}" onclick="return confirm('¿Seguro que  desea eliminar este Usuario?')"  class="btn btn-danger"><i class="glyphicon glyphicon-trash" aria-hidden="true"></i></a>  
                                            </td    >   
                                            <td>    
                                                <a href="{{ route('users.edit', $user->id) }}" class="btn btn-info"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></a>
                                            </td>
                                            <td>&nbsp;</td>
                                        </tr>
                                    @endforeach
                                </tbody>
                            </table>
                    </div>
                @endif
            </div>
        </div>
    </div>
</div>
@endsection

谢谢!

【问题讨论】:

  • 您没有费心检查 User::find() 是否返回任何内容

标签: php function authentication laravel-5.3 crud


【解决方案1】:

签入$id $users = User::find($id); $users->delete();

对象 $users 为空,因为在数据库中未找到用户或 $id 不正确

【讨论】:

  • 我在数据库中有 2 个用户,id:1、2。我可以在用户视图列表中看到 em,但是在我创建删除按钮后它失败了
  • 你能发布“删除”按钮代码吗?可能按钮缺少 id 参数
  • 还有一个想法:尝试使用 User::findOrFail($id) 而不是 find(),如果出现问题会抛出错误
  • Edited main post with view,尝试 fidOrFail 给我这个错误:没有模型 [App\User] 的查询结果。但我实际上有一个模型 App\User;我可以看到我的用户列表,但没有删除按钮
  • 很奇怪。您是否覆盖了 App\User 中的 newQuery() 方法或模型中的某些默认条件?可能你的模型有默认条件,当你试图找到它时,条件正在工作并且找不到 id=$id 的行
【解决方案2】:

在玩弄了代码之后,我发现这很有用: 在视图中,我有 2 个按钮,删除和编辑按钮,我改变了:

{{ route('users.destroy', $user->id) }} {{ route('users.edit', $user->id) }}

为:

{{ url('users.destroy', $user->id) }} {{ url('users.edit', $user->id) }}

现在我可以看到按钮没有任何问题,现在的问题和以前一样,函数destroy给我一个错误。 这是导致错误的路径:

Route::get('{id}',[
    'as' => 'admin.destroy',
    'uses' => 'AdminHomeController@destroy'
]);

错误:没有模型 [App\User] 的查询结果。

这是我的用户模型:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

仍然找不到问题..@edwardstock

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2016-05-29
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多