传递给HasOneOrMany的Laravel Argument 1 :: save()必须是给定的Model数组的实例

Dav*_*vid 4 php model laravel

我是Laravel的新手,当我尝试将数据数据保存到数据库时,我遇到了问题.这是我得到的错误

传递给Illuminate\Database\Eloquent\Relations\HasOneOrMany :: save()的参数1必须是Illuminate\Database\Eloquent\Model的实例,给定的数组,在S:\ Documents\samdyk\vendor\laravel\framework\src中调用\照明\数据库\ Eloquent\Relations\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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是控制器功能

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;
}
Run Code Online (Sandbox Code Playgroud)

所以这里的$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"
  ]
]
Run Code Online (Sandbox Code Playgroud)

所以你可以看到我试图保存一个数组(这是显而易见的).然而,即使在laravel文档中,我看到这个$ post = App\Post :: find(1);

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

那么为什么我的代码错了呢?

Ale*_*nin 10

您需要将一个Skill对象数组传递给该saveMany()方法:

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

$user->skills()->saveMany($skillModels);
Run Code Online (Sandbox Code Playgroud)

你传递的是一个简单的数组.


Elb*_*stu 6

只需尝试 createMany :)

$post->comments()->createMany([
    ['message' => 'A new comment.'],
    ['message' => 'Another comment.'],
]);
Run Code Online (Sandbox Code Playgroud)

请参阅文档:https : //laravel.com/docs/7.x/eloquent-relationships#the-create-method