2017-07-26 1 views
1

Ich bin neu unter Laravel und ich habe ein Problem, wenn ich versuche, Array von Daten in der Datenbank zu speichern. Hier ist der Fehler, den ichLaravel Argument 1 an HasOneOrMany übergeben :: save() muss eine Instanz von Model Array gegeben werden

Argument 1 bestanden Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany erhalten :: save() muss eine Instanz von Illuminate \ Database sein \ Eloquent \ Model, Array gegeben, genannt in S: \ Dokumente \ samdyk \ Anbieter \ Laravel \ Framework \ src \ Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany.php auf der Leitung 267 und definiert

hier ist also mein Code

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); 
    } 
} 

Und hier ist der Funktionsregler

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; 
} 

Also hier ist $request->get('skills') Daten

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" 
    ] 
] 

So wie man sehen kann ich versuchen, ein Array zu speichern (das ist klar). Aber selbst auf Laravel Dokumentation sehe ich diese $ post = App \ Post :: find (1);

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

Warum ist mein Code falsch?

Antwort

3

Sie müssen eine Reihe von Skill Objekte in die saveMany() Methode zu übergeben:

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

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

Und du bist ein einfaches Array übergeben.

+1

Danke! Ich habe mit diesem Problem 3 Stunden gekämpft! Du hast mir viel Zeit gespart. Ich werde deine Antwort so schnell wie möglich annehmen. :) – David

Verwandte Themen