【问题标题】:Laravel 5.3 Observer can't reach the modelLaravel 5.3 Observer 无法访问模型
【发布时间】:2017-03-13 15:55:52
【问题描述】:

我在 Laravel 中有一个 Eloquent User 模型。当我创建一个新用户时,我想为它自动创建一个令牌。我和观察者一起做。但是在观察者中,我无法访问创建的模型,它想创建一个新模型。

我的用户模型:

namespace App;

use App\Observers\UserObserver;
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'
    ];

    public static function boot()
    {
        parent::boot();

        static::observe(UserObserver::class);
    }

}

我的用户观察者

namespace App\Observers;

use App\User;

class UserObserver
{
    public function creating(User $user)
    {
        $user->token = str_random(30);
    }
}

当我创建一个新用户时,我得到一个异常

Connection.php 第 763 行中的 QueryException:

SQLSTATE[23000]:完整性 约束违规:19 NOT NULL 约束失败:users.name(SQL: 插入“users”(“token”、“updated_at”、“created_at”)值 (JQYUmmMrRRJT64VcFVA8UzkpY019u6, 2016-10-31 14:33:35, 2016-10-31 14:33:35))

【问题讨论】:

  • 您的 SQL 错误意味着您没有 name 的值。您的观察员已被“解雇”,您的令牌是 JQYUmmMr...。因此,如果您传递名称的值,也许您正在创建用户。
  • 是的,它想创建一个新对象,而不是为触发事件的那个添加令牌值。首先它创建一个新用户:在 Model::create(array(array('_token' => 'OHggG8VZCFxLSfGelxaHdIOYQSx05M7o16E2QKB2', 'name' => 'name', 'mail' => 'nomail@example.com', 'password ' => '7X194HeFbwl!85>', 'password_confirmation' => '7X194HeFbwl!85>'))) 在 RegistrationController.php 第 20 行捕获事件并想创建一个新用户后,没有任何属性。
  • 请使用此代码更新您的问题。

标签: laravel laravel-5 eloquent laravel-5.3 laravel-request


【解决方案1】:

您似乎没有设置name。你可能会这样做:

User:create(Request::all());

但请求中没有name,因此不会被填充。但是您也将name 列设置为不为空,因此出现异常

【讨论】:

    猜你喜欢
    • 2017-05-21
    • 2017-03-02
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多