在laravel中将多个数据插入数据库

Posted

技术标签:

【中文标题】在laravel中将多个数据插入数据库【英文标题】:multiple data insert into database in laravel 【发布时间】:2020-08-26 19:29:15 【问题描述】:

嗨,我是 laravel 的新手,我在将数据插入数据库并抛出错误时遇到了麻烦

"count(): 参数必须是 实现 Countable 的数组或对象”

我想在数据库中添加所有注册员工的出勤详细信息

控制器

    public function Attendence() 
    
        $data=employee_data::all();
        return view('attendence',compact('data'));
       

    public function mark_attendence(Request $request)
    
        $request->validate([
        'date'  =>  'required',
        'is_present'  =>  'required'

        ]);


        $data=$request->all();
        $last_id=employee_data::create($data)->id;
        if (count($request->is_present) >0 )
         
            # code...
            foreach ($return->is_present as $item => $v)
            
                $data2=array(
                    'is_present' =>$request->is_present[$item],
                    'date'=> $request->date[$item],
                    'user_id'=>$last_id
                );

            
        //$data2->save();

    //$employee->save();
    //$employee->employee_data()->create([]);



        return redirect('/index')->with('succ','Attendence Added Successfully');
    

刀片输出:

提交 ID 名 姓 入职日期 邮政 评论 @foreach( $data 作为 $row ) $row->id $row->first_name $row->last_name $row->date_joining $row->post &nbsp &nbsp 礼物 &nbsp &nbsp 缺席 @endforeach ID 名 姓 入职日期 邮政 评论

型号 类employee_attendence 扩展模型 //

protected $fillable  = array('is_present' ,'date', 'user_id' );
//protected $fillable=[];
public $timemstamps= false ;

public function employee_data()
        //return $this->hasOne(employee_data::class,'App/employee_data');
    return $this->hasOne('App\employee_data');


模型2

命名空间应用程序;

使用 Illuminate\Database\Eloquent\Model;

classemployee_data 扩展模型 //保护 $fillabel=['first_name','last_name','contact_no','date_joining','post'];

protected $fillable  = array('first_name', 'last_name', 'contact_no' ,'date_joining','post' );
//protected $fillable=[];
public $timemstamps= false ;

public function employee_attendence()

        //return $this->hasOne( employee_attendence::class, 'App/employee_attendence');
        return $this->belongsTo('App\employee_attendence');

【问题讨论】:

你的is_present是视图侧的数组吗? 没有 看我下面的答案,它会为你工作。但是您有 AbsentPresent 这样的值,因此请相应地检查条件。 它抛出一个错误:未定义的错误:返回 您是一次标记缺席或出席,还是先选中或取消选中然后立即提交? 【参考方案1】:

据我所知。您可能有 is_present 将是一个数组格式,从视图来看,如 name="is_present[]"。如果这是您的情况,那么下面的代码将正常工作。如果不是,那么如果输入不是对象或数组,则不能使用count()

public function mark_attendence(Request $request)

    for($i = 0; $i < sizeof($request->is_present); $i++)
    
        $emp = new employee_attendence();

        if($request->is_present[$i] == "Present")
        $emp->is_present = "Present";
        if($request->is_present[$i] == "Absent")
        $emp->is_present = "Absent";

        $emp->date = now();
        $emp->user_id = $request->user_id[$i];
        $emp->save();
    
    return redirect('/index')->with('succ','Attendence Added Successfully');

【讨论】:

ErrorException 未定义变量:返回 我刚刚展示了循环的简单逻辑。您必须将$data2 插入下表中。 $data2 ?进入表格【参考方案2】:

在您的添加出勤方法中试试这个 这对我有用

for($i = 0; $i < sizeof($request->is_present); $i++)
    
        $emp = new employee_attendence();

        if($request->is_present[$i] == "Present")
            $emp->is_present = "Present";
        if($request->is_present[$i] == "Absent")
            $emp->is_present = "Absent";

            $emp->date = $request->date; 
            $emp->user_id = $request->user_id[$i];
            $emp->save();
    

【讨论】:

如果你还记得我也给过你这个答案。

以上是关于在laravel中将多个数据插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中将数组插入数据库

在laravel中将数据插入数据透视表

如何在 Laravel 5.6 中将数组插入数据库

如何在 Laravel 中将数据从 1 个视图插入到 2 个表中

Laravel从表单输入中将“null”插入数据库。

如何在 Laravel 5.5 中将数据插入表格并获取电子邮件通知?