【问题标题】:SQLSTATE[HY000]: General error: 1364 Field 'uID' doesn't have a default valueSQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值
【发布时间】:2019-05-09 18:00:04
【问题描述】:

刚开始使用 Laravel。我已将我的用户和配置文件模型与配置文件控制器一起附加。我的目标是自动在 profile 表中分配外键 uID。任何帮助将不胜感激。

用户模型文件

namespace App;

use Illuminate\Database\Eloquent\Model;

class user extends Model
{
    // specify which attributes can be filled out during registration
    public $timestamps = false;
    protected $fillable=['firstname','lastname','email','password',];

    public function profile(){
      return $this->hasOne(profile::class,'pID','uID');
    }
}

轮廓模型文件

namespace App;

use Illuminate\Database\Eloquent\Model;

class profile extends Model
{
    //
    public $timestamps = false;
    protected $fillable = ['summary','uID'];

    public function user(){
      return $this->belongsTo(user::class,'uID','pID');
    }
}

配置文件迁移文件

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProfilesTable extends Migration
{
    public function up()
    {
      // create profile table
        Schema::create('profiles', function (Blueprint $table) {
            $table->increments('pID');
            $table->timestamp('created_at')->useCurrent();
            $table->string('summary')->default('');
            $table->integer('uID')->unsigned();

            $table->foreign('uID')->references('uID')->on('users')->onDelete('cascade');
        });
    }
}

配置文件控制器文件

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\profile;

class ProfileController extends Controller
{
    public function store(Request $request)
    {
       // used to store user profile after validation
        $this->validate($request,[
          'summary' => 'required'
        ]);
        $profile = new profile([
          'summary' => $request->get('summary'),
        ]);
        $profile->save();

        return redirect()->route('profile.create')->with('success','Profile created');
    }
}

【问题讨论】:

  • 你试过给uID一个默认值吗?
  • 我使用 nullable() 作为默认值,问题消失了,但随后它使 uID 为空。我希望在不断添加用户和相关配置文件时将 uID 设置为 User('uID')。

标签: php mysql database laravel xampp


【解决方案1】:

更改您的迁移文件, 由于您想稍后定义您的关系,所以您的外国 id 字段应该可以为空。

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateProfilesTable extends Migration
{
public function up()
{
// create profile table
Schema::create('profiles', function (Blueprint $table) {
$table->increments('pID');
$table->timestamp('created_at')->useCurrent();
$table->string('summary')->default('');
$table->integer('uID')->nullable()->unsigned();

$table->foreign('uID')
        ->references('uID')
        ->on('users')
        ->onDelete('cascade');
});
}
}

如果您想在创建配置文件后分配登录用户,

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\profile;

class ProfileController extends Controller
{
    public function store(Request $request)
    {
       // used to store user profile after validation
        $this->validate($request,[
          'summary' => 'required'
        ]);
        $profile = new profile([
          'summary' => $request->get('summary'),
          'uID'     => auth()->user()->id,

        ]);
        $profile->save();

        return redirect()->route('profile.create')->with('success','Profile created');
    }
}

【讨论】:

    【解决方案2】:

    如果您没有在程序中提供值,则需要在表定义级别提供默认值。

    根据您的描述,您似乎缺少在创建用户记录后创建个人资料。

    【讨论】:

    • 我使用 nullable() 作为默认值,问题就消失了,但是如何将 uID 设置为 User('uID')。 uID 是引用用户('uID')的外键。我想继续添加新用户及其关联的配置文件,而无需在配置文件表中手动设置 uID 外键。
    • 因此,您将使用 ID 添加用户作为自动增量,并且在您需要创建新配置文件时没有最后一个自动增量序列值。我对吗?尝试提供选择用户对象以获取自动增量值。
    • 是的。我如何实施您的建议?我是否在 $profile->save() 之前添加 $profile['uID'] = $profile->user()->uID
    • @AmartyaBarua:那不正确。在 $profile->user() 那时可能会有空值。在最坏的情况下,您需要调用数据库上的类似 SELECT * FROM users WHERE firstname = '...' AND lastname = '...' AND email = '...' 来让您的自动增量返回到您的程序。我不知道 Laravel 的工作机制。许多框架还会在将实体发送到数据库后自动更新实体以获取数据库数据。
    猜你喜欢
    • 2019-12-01
    • 2021-05-23
    • 2019-09-10
    • 2021-01-04
    • 2020-09-06
    • 2020-06-21
    • 2019-05-19
    • 2019-06-05
    • 2019-12-13
    相关资源
    最近更新 更多