【问题标题】:Trying to get property of non-object ErrorException (E_NOTICE)试图获取非对象 ErrorException (E_NOTICE) 的属性
【发布时间】:2018-10-16 19:06:09
【问题描述】:

我正在尝试使用 laravel 在 mysql 中插入数据,而我收到错误 ErrorException (E_NOTICE) 试图获取非对象的属性,我不知道的问题在哪里,请帮助我。

我的控制器代码是 PublicationController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\publication;
use Auth;

class PublicationController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        return view('publications');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        publications::create([
            'user_id' => Auth::user()->id,
            'title' => request('title'),
            'status' => request('status'),
            'year' => request('research_area')
        ]);
        return 'inserted';
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

虽然模型代码给出publication.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class publication extends Model
{
    //
    protected $fillable = ['title','status','year'];
}

我的路线代码已给出。

<?php

/*
|--------------------------------------------------------------------------
| 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('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::get('education', 'EducationController@index');
Route::post('edu', 'EducationController@store');

Route::get('publications','PublicationController@index');
Route::post('pub','PublicationController@store');

错误被赋予 Class ErrorException (E_NOTICE) 试图获取非对象的属性,如果有人知道问题出在哪里,请帮忙

【问题讨论】:

  • 我认为Auth::user()-&gt;id 可能是问题所在。检查Auth::user() 是否为空。
  • id是user表中的主键,在发布表user_id中用作外键
  • 用户表包含数据,不为空
  • 你的 store 方法引用了publications,你的使用语句是App\publication
  • publication 是我的模型,而 Publications 是 mysql 数据库中的表名

标签: mysql laravel


【解决方案1】:

考虑将PublicationController 放在身份验证中间件后面:

class PublicationController extends Controller
{
    ...
    public function __construct()
    {
        $this->middleware('auth');
    }
    ...
}

你也可以使用路由组:

Route::middleware(['auth'])->group(function () {
    // your routes
});

如果Auth::user() 为空,那么Auth::user()-&gt;id 将为您提供您提到的异常。将路由或控制器放在中间件后面应该可以解决这个问题。

编辑

这假设您使用的是 Laravel 5.6 https://laravel.com/docs/5.6。这应该适用于 5.5 和 5.7。

【讨论】:

    【解决方案2】:

    最后我通过在我的模型可填充数组中包含“user_id”找到了我的问题的答案,并且上面的代码可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 2018-04-14
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多