2017-08-29 28 views
1

爲什麼我的播種機代碼中的「關係」不起作用?它插入到用戶模型沒有任何問題。但是不會向UserMeta模型插入任何內容。甚至沒有任何錯誤。
我已經在控制器中測試過這段代碼。它運行罰款與 「關係」Laravel:如何在關係中運行播種機

<?php 

use Illuminate\Database\Seeder; 
use App\User; 
use App\UserMeta; 

class MyUsersTableSeeder extends Seeder 
{ 
    /** 
    * Auto generated seed file. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     if (User::count() == 0) { 

      $user = User::create([ 
       'name'   => 'Admin', 
       'email'   => '[email protected]', 
       'password'  => bcrypt('password'), 
       'remember_token' => str_random(60), 
      ]); 

      $user_meta = new UserMeta([ 
       'meta_key' => 'role', 
       'meta_value' => 'admin', 
      ]); 
      $user->UserMeta()->save($user_meta); 
     } 
    } 
} 

型號用戶

public function UserMeta() 
{ 
    return $this->hasOne('App\UserMeta', 'user_id'); 
} 

型號UserMeta

public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

用戶表

 Schema::create('users', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('email')->unique(); 
      $table->string('password'); 
      $table->rememberToken(); 
      $table->timestamps(); 
     }); 

usermeta表

 Schema::create('usermeta', function (Blueprint $table) { 
      $table->increments('user_meta_id'); 
      $table->integer('user_id')->unsigned(); 
      $table->string('meta_key'); 
      $table->string('meta_value'); 
     }); 
+0

告訴你兩個模型的關係 –

+0

用戶表是否有usermeta_id? – Sletheren

回答

0

usermeta遷移更改爲

Schema::create('usermeta', function (Blueprint $table) { 
    $table->increments('user_meta_id'); 
    $table->integer('user_id')->unsigned(); 

    // add foreign key constraint 
    $table->foreign('user_id')->references('id')->on('users'); 

    $table->string('meta_key'); 
    $table->string('meta_value'); 
}); 

,並重新運行遷移。

0

試試下面的代碼:

$user_meta = new UserMeta([ 
       'meta_key' => 'role','user_id'=>$user_id, 
      ]); 
$user_meta->user_id=$user->id; 
$user_meta->save(); 
+1

我在模型中引入了表格。受保護的$ table ='usermeta'; – Miri

+0

從我的回答中刪除了對命名約定的提及 –