我有一个表,它的唯一键是app_id + channel_id,但它没有主键。
我想使用on duplicated key update语句在Laravel eloquent模型中插入/更新一个last_update_time字段,我找到了updateOrCreate方法,但它在我的项目中不被识别,我应该如何编写我的模型?
发布于 2018-10-12 23:24:47
DB::statement("INSERT INTO `table_name`(`col_name_1`, `col_name_2`) VALUES (?, ?) ON DUPLICATE KEY UPDATE col_name_1= VALUES (col_name_1)", [val_1, val_2]);
Laravel允许使用DB::statment($query, $bindings = [])编写原始数据库语句。
要确保的一件事是,第二个参数必须是索引数组,而不是关联数组。如果它是关联的,它将抛出一般的SQL异常。
发布于 2016-04-20 16:36:18
在Laravel文档中(参见here最后一部分),Laravel中有两种方法:
其他创作方法
还可以使用另外两种方法通过批量指定属性来创建模型: firstOrCreate和firstOrNew。firstOrCreate方法将尝试使用给定的列/值对来定位数据库记录。如果在数据库中找不到该模型,将使用给定的属性插入一条记录。
与firstOrCreate一样,firstOrNew方法将尝试在数据库中查找与给定属性匹配的记录。但是,如果没有找到模型,则会返回一个新的模型实例。请注意,firstOrNew返回的模型尚未持久化到数据库。您需要手动调用save来持久化它:
// Retrieve the flight by the attributes, or create it if it doesn't exist...
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);
// Retrieve the flight by the attributes, or instantiate a new instance...
$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);发布于 2016-07-15 17:30:28
你试过updateOrCreate(array $attributes, array $values = [])吗?
只要使用具有自动增量id列的表,就可以将Model::updateOrCreate()与第一个参数一起用作包含要查找的属性的关联数组,并将第二个参数用作包含任何新值的关联数组。
请参阅updateOrCreate的方法定义。
https://stackoverflow.com/questions/36736446
复制相似问题