2016-11-05 65 views
0

尝试更新登录后,用户配置文件和我有此错误:SQLSTATE [23000]:完整性约束冲突:在Laravel 5

QueryException in Connection.php line 662: 
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`wallet`.`profiles`, CONSTRAINT `profiles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into `profiles` (`gender`, `city`, `state`, `profession`, `aboutmyself`, `fb`, `twitter`, `gp`, `instagram`, `personal_site`, `aboutme`, `linkedin`, `pinterest`, `updated_at`, `created_at`) values (male, Upper Darby, Washington DC, Architects, Am a Benefactor of Grace and a Heir to the Throne a Royal Priesthood. I Love Jesus! s, url, url, url, url, url, url, hurl, url, 2016-11-05 09:35:51, 2016-11-05 09:35:51)) 

和本

PDOException in Connection.php line 390: 
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`wallet`.`profiles`, CONSTRAINT `profiles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) 

意味着代码的一部分正在执行,但“完整性违规”中的某些内容阻碍了数据的保存。

CONTROLLER(UserController.php)

public function update(Request $request) 
{ 

    $rules = [ 
     'name' => 'required', 
     'email' => 'required', 
     'phone' => 'required|numeric', 
     'country' => 'required', 
     'gender' => 'required', 
     'birthday' => 'required', 
     'fb' => 'url', 
     'twitter' => 'url', 
     'gp' => 'url', 
     'instagram' => 'url', 
     'personal_site' => 'url', 
     'aboutme' => 'url', 
     'linkedin' => 'url', 
     'pinterest' => 'url' 

    ]; 

    $data= $request->all(); 
    $validator = Validator::make($data, $rules); 
    if($validator->fails()){ 
     return Redirect::back()->withInput()->withErrors($validator); 
    } 

    $user = Auth::user(); 

    $user->name = $data['name']; 
    $user->email = $data['email']; 
    $user->phone = $data['phone']; 
    $user->country = $data['country']; 
    $user->birthday = $data['birthday']; 
    $user->address = $data['address']; 
    if($user->save()) { 
     $profile_id = $user->id; 
     $profile = Profile::findOrFail($user->id); 
     if(count($profile) > 0) { 
     $profile = new Profile(); 
     $profile->gender = $data['gender']; 
     $profile->city = $data['city']; 
     $profile->state = $data['state']; 
     $profile->profession = $data['profession']; 
     $profile->aboutmyself = $data['aboutmyself']; 
     $profile->fb = $data['fb']; 
     $profile->twitter = $data['twitter']; 
     $profile->gp = $data['gp']; 
     $profile->instagram = $data['instagram']; 
     $profile->personal_site = $data['personal_site']; 
     $profile->aboutme = $data['aboutme']; 
     $profile->linkedin = $data['linkedin']; 
     $profile->pinterest = $data['pinterest']; 
     //$profile = $user->profile()->save($profile); 
     $profile->save(); 
} 
    } else { 
     return redirect()->back()->withInput()->withInfo("Something went wrong. Please, try again"); 
    } 
    return redirect()->route('profile')->withSuccess("Your Profile Succesfully Updated."); 

} 

用户迁移

<?php 

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

class CreateUsersTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('users', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('login'); 
      $table->string('email')->nullable(); 
      $table->string('phone')->nullable(); 
      $table->string('password', 60); 
      $table->string('birthday'); 
      $table->string('country')->default('AF'); 
      $table->string('address'); 
      $table->integer('active')->default(0); 
      $table->rememberToken(); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('users'); 
    } 
} 

PROFILE迁移

<?php 

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

class CreateProfilesTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('profiles', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('user_id')->unsigned(); 
      // $table->string('birthday'); 
      $table->string('aboutmyself'); 
      $table->string('gender'); 
      $table->string('age'); 
      $table->string('propic')->default('uploads/demo.png'); 
      $table->string('address'); 
      $table->string('state'); 
      $table->string('city'); 
      $table->string('fb'); 
      $table->string('twitter'); 
      $table->string('gp'); 
      $table->string('personal_site'); 
      $table->string('instagram'); 
      $table->string('aboutme'); 
      $table->string('linkedin'); 
      $table->string('pinterest'); 

      $table->foreign('user_id')->references('id')->on('users') 
       ->onUpdate('cascade')->onDelete('cascade'); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('profiles'); 
    } 
} 
+0

[将数据插入数据库与Laravel 5]可能重复(http://stackoverflow.com/questions/40428040/inserting-data-into-database-with-laravel-5) – RST

+0

似乎你是张贴在同一主题多次。同时注意评论。在你的其他主题有人提到你提供的方式太多代码https://stackoverflow.com/questions/40428040/inserting-data-into-database-with-laravel-5 – RST

回答

0

需要查看很多代码,但是,我认为您的问题可能在于您的User型号上的$fillable阵列。看来,你已经添加额外的列到你的用户表,而允许它们被大量分配,所以你需要确保你将它们添加到$fillable阵列像这样:

protected $fillable = ['name', 'login','email', 'password', 'country', 'birthday'...];

参见:https://laravel.com/docs/5.3/eloquent#mass-assignment

你应该也确实使用了验证一个FormRequest这种规模,以防止它堵塞你的控制器:

https://laravel.com/docs/5.3/validation#form-request-validation

而且你应该看看如何保存的关系:

https://laravel.com/docs/5.3/eloquent-relationships#inserting-and-updating-related-models

你应该注意到,eloquent您输入字段自动映射到数据库列具有相同的名称,所以你应该真的能打破这种控制方法下只需要几行代码。

0

您违反了外键约束。您不会将任何内容添加到$ profile-> user_id中,并且它保持为空,并且您的数据库不允许这样做。只需在$profile = new Profile();之后添加$profile->user_id = $user->id;即可使用。

相关问题