【问题标题】:how to insert data to multiple tables in laravel 6如何在 laravel 6 中向多个表中插入数据
【发布时间】:2020-04-08 15:22:53
【问题描述】:

用户注册后我需要帮助将数据插入多个表 假设我有下面的代码,创建新用户并将数据存储到多个表中的最佳方法是什么。

注册用户特征

<?php

namespace App\Traits;

use App\User;
use App\Profile;
use App\Account;
use Keygen;

trait RegisterUser
{
    public function registerUser($fields)
    {   


        $user = User::create([

            'username'      => $fields->username,
            'accno'        =>  $this->generateAccountNumber(),
            'email'      => $fields->email,
            'password'  => $fields->password = bcrypt(request('password')),
            'roles'  => $fields->roles,
            'activation_code' =>  $this->generateToken()
        ]);

            Profile::create([
                'accno' => $user->accno,
                'username' => $user->username,
                'acc_type'      => $fields->acc_type,
                'firstname'      => $fields->firstname,
                'lastname'      => $fields->lastname,
                'nationality'     => $fields->nationality,
                'occupation'     => $fields->occupation,
                'address'     => $fields->address,
                'city'     => $fields->city,
                'state'     => $fields->state,
                'zipcode'     => $fields->zipcode,
                'phoneno'     => $fields->phoneno,
                'dob'     => $fields->dob,
                'gender'     => $fields->gender,
                'martial_status'     => $fields->martial_status,
                'user_image'     => $fields->user_image,
            ]);

            Account::create([
                'accno' => $user->accno,
                'username' => $user->username,
            ]);





            return $user;

    }

使用这个registrationController;

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Http\Requests\RegistrationRequest;
use App\Traits\RegisterUser;

class RegistrationController extends Controller
{
    use RegisterUser;

    public function show()
    {
        return view('auth/register');
    }

    public function register(RegistrationRequest $requestFields)
    {
      //calling the registerUser method inside RegisterUser trait.
      $user = $this->registerUser($requestFields);

      return redirect('/login');

     }
}

但是现在我每次尝试注册用户时,都会得到一个找不到页面(404)的错误,并且数据只插入到用户表中。

【问题讨论】:

  • 你的模型是什么样的?我认为您应该使用请求中的字段配置 fillableguarded 属性。这是文档:laravel.com/docs/6.x/eloquent#mass-assignment
  • 请帮助我使用它来解决我的问题,我已经在我的用户、配置文件和帐户模型中包含了受保护的属性,并且我的可填充是正确的
  • 你的模型是什么样的?你是否在 laravel 的日志文件中出现错误?
  • 如何检查错误?
  • 日志文件的默认目录是ROOT -> storage -> logs

标签: php laravel


【解决方案1】:

不要更改注册表控制器 最好的方法是使用带有命令的观察者

php artisan make: observer RegisterObserver -m Users

观察者被创建并在创建的方法中完成他的工作

然后在 AppServiceProvider 文件提供程序中 写下这个命令的启动方法

User:observe(RegisterObserver::class)

要重定向到所需的页面,请更改此设置

protected $redirectTo={path}

【讨论】:

  • 观察者不是这类任务的最佳场所。事件/监听器会更好。当您对(在这种情况下为观察者)用户对象进行一些更改时,您想使用观察者。将完整的 $fields 对象传递给观察者并在观察者中进行许多不相关的操作并不是一个好方法。在 UserObserver 中,您想对用户对象进行更改,而不是试图保持代码干净。以这种方式思考什么是观察者:它观察用户对象发生的事情 - 而不是无关对象发生的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 2020-03-29
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多