私はLaravel 5.2とMySQLを使用しています。Laravel - 外部キーが無効なテーブル - 更新済み
私はLaravelに慣れるためのプロジェクトを開発しています。私のプロジェクトは連絡先情報をテーブルに保存できる電話帳です。しかし、これを行うには、システムにログインする必要があります。私はmake:auth
コマンドを使用して作成しました。シンプルさ、そうだ。
私の "Users
"テーブルには、フィールドID
があります。このテーブルは、ログインして連絡先にアクセスできるようにユーザー情報を保存するために使用されます。私は私の連絡先の保管場所である私の「Contacts
」テーブルでは、
は、ユーザーテーブルからフィールドID
を取ることになっている「Created By
」という名前の列で、ただの生みの親だった誰参照する連絡先を言いました。ここ
しかし、事ある:
連絡先テーブルが移行されていない、それは私が何をするかは重要ではありません。
参照先のプライマリキーがあり、その後に外部フィールドが設定されているCONTACTS
があるため、最初にUSERS
を両方のテーブルから削除してゼロから作成しました。私はモデルを落として、上記の同じ順序でモデルを作成しました。何がうまくいくか分かっているからです。
はここに私の移行ファイルです:
USERSの移行に述べたように
----- ... -----
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email', 191)->unique();
$table->string('password', 191);
$table->timestamp('updated_at');
$table->timestamp('created_at');
$table->rememberToken();
});
}
----- ... -----
、テーブルには、私は私の他のテーブルで参照していますIDフィールドがあります。
CONTACTS MIGRATION
----- ... -----
public function up()
{
Schema::create('contacts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id', false, true);
$table->foreign('user_id')->references('id')->on('users');
$table->string('image');
$table->string('name');
$table->string('lastname');
$table->string('email', 191)->unique();
$table->string('phone',191)->unique();
$table->string('address');
$table->string('description', 255);
});
----- ... -----
フィールドUSER_ID述べたように、表ユーザのidフィールドを参照します。 2番目のパラメータはfalseに設定され、3番目のパラメータはunsignedに設定されます。
デフォルトのスタイル($ table-> integer( 'user_id') - > unsigned(); --- $ table-> foreign .....;)を作成しても、 。
は、私がそうであっても同様に、この本体から分離したスキーマに外国のフィールドを作った:Schema::table('contacts', function($table) {
$table->foreign('user_id')->references('id')->on('users');
});
しかし、たとえこのように、移行が機能していません。
私は本当に何が起こっているのか分かりません。
この私の連絡先モデル
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Contact extends Model
{
// Getting the user associated with the contact
// which means, I hope,
// The user that created the contact entry in the table 'contacts'
public function user()
{
return $this->belongsTo('App\User');
}
// protected $table = 'contacts';
// not using an id field
// could this be the error?
// dunno
// isn't laravel making an automatic id field?
// dunno too
public $fillable = array('name', 'lastname', 'email', 'phone', 'address');
// public $foreign = ('user_id');
//added because of error at migration
public $timestamps = false;
}
は、これは私のユーザモデル
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
// Putting it in simple terms
// Hopefully, this will return
// the many contacts that said user recorded in the 'contacts' table
public function contact()
{
return $this->hasMany('App\Contact');
}
// protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
UPDATE
私はちょうど私のマイグレーションをロールバックして再度migrate
コマンドを使用して、それです今回は働いた。
ユーザーを登録することができますので、auth::check
が動作し、CONTACTS
テーブルに連絡先を挿入するためのフォームが表示されます。
しかし、私は保存するボタンをクリックしたときに、私は次のエラーを取得する:
2/2
QueryException in Connection.php line 729:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`phonebook`.`contacts`, CONSTRAINT `contacts_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
1/2
PDOException in Connection.php line 457:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`phonebook`.`contacts`, CONSTRAINT `contacts_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
私はまだ何が起こっているか分かりません。
具体的なエラーはありますか? – Rahul
投稿にエラーが挿入されました、Rahul。 –
保存したいモデルに既存のユーザーIDを追加したかどうか確認できますか?そして、$ table-> integer( 'user_id'、false、true);を '$ table-> integer( 'user_id'、false、true) - > unsigned();' –