【问题标题】:Laravel, abstraction layer for 'users' tableLaravel,“用户”表的抽象层
【发布时间】:2019-07-13 07:44:27
【问题描述】:

在一个 Laravel 项目中,我想使用 Laravel 身份验证表“用户”来拥有一个外域键来指向另一个表作为抽象层。有没有办法强制用户注册向该抽象层表添加一行?它的模型很简单,只有一个属性。

我的注册控制器: ` 受保护的函数创建(数组 $data){

    Rekvirent::create([
        'rekvirent' => $data['initialer'],
    ]);

    return User::create([
        'initialer' => $data['initialer'],
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

` 我从 mysql 收到一条错误消息,提示存在外键错误,表明在用户表中插入行时尚未插入 rekvirent。

我的rekvirent模型如下

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Rekvirent extends Model {
    public $timestamps = false;     // dumps timestamps from table
    public $incrementing = false;   // if no autoincrementing
    protected $table = 'rekvirent';    // change default snake-case name
    protected $keyType = 'string';  // if key is not integer

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'initialer',
    ];
/*
    public function user() {
        return $this->hasOne('App\User');
    }
 */
}

【问题讨论】:

  • 你在说什么“抽象”,为什么需要它?
  • 请分享您的代码
  • 抽象是在预订系统中将两个类转换为一个类所必需的。注册用户就是其中之一。

标签: php laravel


【解决方案1】:

如果您希望在新用户注册后执行某些操作,您可以监听事件。

如果你看到Illuminate/Foundation/Auth/RegistersUsers.php

/**
 * Handle a registration request for the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function register(Request $request)
{
    $this->validator($request->all())->validate();

    event(new Registered($user = $this->create($request->all())));

    $this->guard()->login($user);

    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath());
}

您会注意到 laravel 在内部发出一个事件 Illuminate\Auth\Events\Registered。您可以收听该事件,然后执行您需要的操作,例如插入单独的表格等。

查看事件documentation 以监听事件。

【讨论】:

  • 我正在寻找一种在插入用户之前插入的方法
  • 您可以在实际为注册创建用户之前将其添加到RegisterControllercreate() 方法中。
  • 谢谢。如果您查看我添加的代码,这正是我尝试做的
  • 解决了!我在可填写的字段名称中有错误。改变它,一切正常。尽管我在这里是菜鸟,但感谢 Mihir 对我的兴趣
猜你喜欢
  • 2012-07-21
  • 2010-09-30
  • 1970-01-01
  • 2011-08-18
  • 2015-04-19
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多