使用Sentinel将主题模型存储到数据库时出错

时间:2016-06-13 03:17:04

标签: laravel laravel-4 laravel-5 laravel-5.1 laravel-5.2

我有一个小论坛,我正在尝试为商店方法创建主题和回复。

routes.php文件

Route::get('board/{id}/create', 'TopicsController@create');
Route::post('board/{id}/create', 'TopicsController@store');

TopicsController.php

public function store()
{
    $this->request->user()->topics()->create([
        'board_id' => $this->request->id,
        'title' => $this->request->title,
        'body' => $this->request->body
    ]);
    return redirect(url('/board/' . $this->request->id));
}

我收到此错误。

Call to a member function topics() on null

另请注意,我正在使用此回购邮件中的Sentinel https://github.com/rydurham/Sentinel

<?php namespace App\Models;


class User extends \Sentinel\Models\User
{

    protected $fillable = ['email', 'first_name', 'last_name'];

    protected $hidden = ['password'];

    public function topics()
    {
        return $this->hasMany(Topic::class);
    }

    public function replies()
    {
        return $this->hasMany(Reply::class);
    }

    public function getGravatarAttribute()
    {
        $hash = md5(strtolower(trim($this->attributes['email'])));
        return "https://www.gravatar.com/avatar/$hash";
    }
}

更新模型

public function store($id)
    {
        $user = Sentry::getUser($id);

        $user->topics()->create([
            'board_id' => $this->request->id,
            'title' => $this->request->title,
            'body' => $this->request->body
        ]);
        return redirect(url('/board/' . $this->request->id));
    }

1 个答案:

答案 0 :(得分:1)

您的用户对象似乎为null。使用id

正确检索用户
public function store($id)
{

    $user = \App\Models\User::find(\Sentinel::getUser()->id);

    $user->topics()->create([
        'board_id' => $this->request->id,
        'title' => $this->request->title,
        'body' => $this->request->body
    ]);
    return redirect(url('/board/' . $this->request->id));
}