2017-07-26 17 views
1

私はに新しくなりました.Laravelに新規であり、データ配列をデータベースに保存しようとすると問題が発生します。ここで雄弁\モデル、 に呼ばれる配列を指定しては、\私は を照らし\データベースに渡さLaravel HasOneOrMany :: save()に渡された引数1は、モデル配列のインスタンスである必要があります。

引数1 \雄弁\リレーションズ\ HasOneOrManyを取得::(保存)エラーが点灯\データベースの インスタンスでなければならないのですS:\ドキュメント\ samdyk \ベンダ\ laravel \枠組み\ SRC \を照らし\データベース\雄弁\リレーションズ\ HasOneOrMany.php ライン267上及びだからここに私のコードは

class Skill extends Model 
{ 
    protected $fillable = ['skill_title', 'knowledge_level']; 
} 

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * 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', 
    ]; 

    public function skills() { 
     return $this->hasMany(Skill::class); 
    } 
} 

を定義しあなたは私が配列(それは明らかだ)を保存しようと見ることができるようには

そして、ここでコントローラ機能

public function editMyProfile(Request $request) { 
     $user = Auth::user(); 

     dump($request->get('skills')); 
     // dump($request->get('skills')[0]); 
     dump($user->skills()->saveMany($request->get('skills'))); 
     return 1; 
} 

は、だからここだ$request->get('skills')データ

array:5 [ 
    0 => array:2 [ 
    "skill_title" => "fghjghj" 
    "knowledge_level" => "20" 
    ] 
    1 => array:2 [ 
    "skill_title" => "gjghjhgj" 
    "knowledge_level" => "50" 
    ] 
    2 => array:2 [ 
    "skill_title" => "ghjhgjgfjh" 
    "knowledge_level" => "80" 
    ] 
    3 => array:2 [ 
    "skill_title" => "hjkhgkkkhgjkjhkhjgk" 
    "knowledge_level" => "53" 
    ] 
    4 => array:2 [ 
    "skill_title" => "jghjhgjhgj" 
    "knowledge_level" => "57" 
    ] 
] 

です。しかし、laravelのドキュメントでさえ私はこれを見ています $ post = App \ Post :: find(1);

$post->comments()->saveMany([ 
    new App\Comment(['message' => 'A new comment.']), 
    new App\Comment(['message' => 'Another comment.']), 
]); 

なぜ私のコードが間違っていますか?

答えて

3

あなたはsaveMany()方法にSkillオブジェクトの配列を渡す必要があります。

$skillModels = []; 
foreach ($request->skills as $skill) { 
    $skillsModels[] = new Skill($skill); 
} 

$user->skills()->saveMany($skillModels); 

そして、あなたは単純な配列を渡しています。

+1

ありがとうございました!私はこの問題に3時間苦労していました!あなたは私に多くの時間を救った。できるだけ早くあなたの答えを受け入れます。 :) – David

関連する問題