使用DB Facade仅插入一次DB

时间:2019-09-05 11:47:00

标签: mysql laravel eloquent

我试图用用户在特定时间范围内登录系统后生成的行填充用户表。但是,鉴于用户可以注销并再次登录的事实,我不想为同一用户用另一行填充表格。我还希望能够生成另一行,例如,假设该用户明天再次登录(最有可能的是,表中还会有其他用户在他之后登录)。到目前为止,这是我设法实现的目标:

$datetime = new DateTime();
$timezone = new DateTimeZone('Europe/Sofia');
$datetime->setTimezone($timezone);
$Shifts = DB::table('shifts')->latest()->first();

if ($datetime->format('H:i') >= '05:50' && $datetime->format('H:i') <= '17:10') {
    DB::table('attendanceTable')->insert(['user_id' => $request->loggedUserId, 'shift_id' => $Shifts->id, 'created_at' => $datetime, 'updated_at' => $datetime]);
}

这是表格结构:

 Schema::create('attendanceTable', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('user_id');
        $table->unsignedInteger('shift_id');
        $table->timestamps();

我尝试使用insertOrIgnore方法,但出现此错误:

Call to undefined method Illuminate\Database\Query\Builder::insertOrIgnore()

1 个答案:

答案 0 :(得分:0)

#include <iostream> #include <string> #include <set> using namespace std; struct Productions { char LHS; string RHS; bool operator<(const Productions& t) const { return (this->LHS < t.LHS); } }; int main() { int NoP; cout<<"Enter No. of Productions: "; cin>>NoP; multiset<Productions> old_prod; Productions prod; for(int i=0; i<NoP; i++) { cout<<"Enter Production No. "<<i+1<<":"<<endl; cout<<"LHS: "; cin>>prod.LHS; cout<<"RHS: "; cin>>prod.RHS; old_prod.insert(prod); } cout<<old_prod.size()<<endl; for(auto it=old_prod.begin(); it!=old_prod.end(); it++) { cout<<it->LHS<<"->"<<it->RHS<<endl; } } 上添加一个“天”字段,并使attendanceTableuser_id的组合唯一

day

现在您有一个独特的约束,不允许在同一天为同一用户插入出勤

注意:您不是在使用Eloquent,而是在使用DB Facade

了解如何使用雄辩的ORM here

进行插入

现在要插入记录,您可以具有这样的条件

$table->increments('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('shift_id');
$table->date('day');
$table->unique(['user_id', 'day']);
$table->timestamps();