【问题标题】:Populating Users table with foreign key constraint onto another table in Laravel 5.4将带有外键约束的用户表填充到 Laravel 5.4 中的另一个表中
【发布时间】:2017-07-30 12:18:19
【问题描述】:

我在我的用户表的帐户表上添加了一个带有外键约束的列 account_id

对于注册过程,我现在希望首先将email 插入到帐户表中。然后我想用account_id 和所有其他注册信息填充用户表。

我的 RegisterController.php 看起来像这样:

<?php

namespace App\Http\Controllers\Auth;

use App\Account;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
//            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
       $account = Account::create([
            'email' => $data['email'],
        ]);


        return User::create([
//            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'account_id' => $accounts['id'],
        ]);
    }
}

我的 Account.php 如下所示:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Account extends Model
{
  public function user()
    {
        return $this->hasOne('User','account_id');
    }
}

而我的 Users.php 看起来像这样:

<?php

namespace App;

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 = [
        'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function account()
    {
        return $this->belongsTo('Account');
    }

}

这似乎不起作用。我是 Laravel 的新手,在这里有点迷路。任何指针都会很棒!

【问题讨论】:

    标签: laravel laravel-5 laravel-5.4


    【解决方案1】:

    请在顶部添加以下行

    use App\Account;
    

    您需要在控制器上定义模型名称。这就是您出错的原因。

    更新

    当您像这样在RegisterController 中使用namespace 时:

    namespace App\HTTP\Controllers\Auth;
    

    那么你的RegisterController.php文件必须在App\HTTP\Controllers\Auth里面。

    当您使用这样的工匠命令创建控制器时:

    php artisan make:controller RegisterController
    

    然后,默认情况下 RegisterController.phpApp\HTTP\Controllers\ 创建。所以,你需要把namespace改成

    namespace App\HTTP\Controllers;
    

    那么你的问题就解决了。

    【讨论】:

    • 谢谢。我将如何正确设置我的模型?我跑了php artisan make:model Account,然后像这样设置Account.php:&lt;?php namespace App; use Illuminate\Database\Eloquent\Model; class Account extends Model { public function user(){ return $this-&gt;belongsTo("App\User"); } }现在我得到这个错误:Class App\Http\Controllers\Auth\RegisterController does not exist
    • 只需在控制器上添加以上行。 Account 表的其他字段是什么。您是否将其他列字段定义为可为空?
    • 是的,所有其他字段都可以为空,我在 RegisterController 文件的顶部添加了 use App\Account;
    • 错误与您的模型无关。您可以将您的路线添加到create() 控制器功能
    • 抱歉,我该怎么做?
    猜你喜欢
    • 2021-08-24
    • 2020-04-14
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多