2017-07-26 46 views
1

我是新的Laravel當我嘗試將數據數據保存到數據庫時,我遇到問題。這裏的錯誤,我得到傳遞給HasOneOrMany :: save()的Laravel參數1必須是給定的Model數組的實例

傳遞給 照亮\數據庫\雄辯\關係\ HasOneOrMany參數1 ::保存()必須照亮\數據庫的 實例\口才\型號,數組給定,稱爲 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

您需要Skill對象的數組傳遞給saveMany()方法:

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

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

而且你傳遞一個簡單的數組。

+1

謝謝!我正在爲這個問題掙扎3個小時!你爲我節省了很多時間。我會盡快接受你的回答。 :) – David

相關問題