Mysql 尝试获取非对象ErrorException的属性(E_通知)

Mysql 尝试获取非对象ErrorException的属性(E_通知),mysql,laravel,Mysql,Laravel,我正在尝试使用laravel在mysql中插入数据,同时收到错误错误异常E_通知 正在尝试获取非对象的属性,我不知道哪里有问题,请帮助我 我的控制器代码是PublicationController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\publication; use Auth; class PublicationController extends Control

我正在尝试使用laravel在mysql中插入数据,同时收到错误错误异常E_通知 正在尝试获取非对象的属性,我不知道哪里有问题,请帮助我

我的控制器代码是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');
该错误被给予类ErrorException E_通知 试图获取非对象的属性,如果有人知道问题出在哪里,请提供帮助

考虑将PublicationController置于身份验证中间件之后:

class PublicationController extends Controller
{
    ...
    public function __construct()
    {
        $this->middleware('auth');
    }
    ...
}
也可以使用管线组:

Route::middleware(['auth'])->group(function () {
    // your routes
});
如果Auth::user为null,则Auth::user->id将为您提供您提到的异常。将路由或控制器放在中间件后面应该可以解决这个问题

编辑


这假设您使用的是Laravel 5.6。这应该适用于5.5和5.7。

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

我认为Auth::user->id可能是问题所在。检查Auth::user是否为null。id是用户表中的主键,而它在包含数据的名为user\u iduser table的发布表中用作外键,它不是空的。您的存储方法引用发布,并且您的使用语句是App\publicationpublicationismymodel,而发布是mysql数据库中表的名称