2017-07-26 45 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

相关问题