首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Laravel 5.2 eloquent模型编写“在重复密钥更新时”?

问如何为Laravel 5.2 eloquent模型编写“在重复密钥更新时”?
EN

Stack Overflow用户
提问于 2016-04-20 15:16:28
回答 3查看 4.6K关注 0票数 2

我有一个表,它的唯一键是app_id + channel_id,但它没有主键。

我想使用on duplicated key update语句在Laravel eloquent模型中插入/更新一个last_update_time字段,我找到了updateOrCreate方法,但它在我的项目中不被识别,我应该如何编写我的模型?

EN

回答 3

Stack Overflow用户

发布于 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异常。

票数 4
EN

Stack Overflow用户

发布于 2016-04-20 16:36:18

在Laravel文档中(参见here最后一部分),Laravel中有两种方法:

其他创作方法

还可以使用另外两种方法通过批量指定属性来创建模型: firstOrCreate和firstOrNew。firstOrCreate方法将尝试使用给定的列/值对来定位数据库记录。如果在数据库中找不到该模型,将使用给定的属性插入一条记录。

与firstOrCreate一样,firstOrNew方法将尝试在数据库中查找与给定属性匹配的记录。但是,如果没有找到模型,则会返回一个新的模型实例。请注意,firstOrNew返回的模型尚未持久化到数据库。您需要手动调用save来持久化它:

代码语言:javascript
复制
// 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']);
票数 0
EN

Stack Overflow用户

发布于 2016-07-15 17:30:28

你试过updateOrCreate(array $attributes, array $values = [])吗?

只要使用具有自动增量id列的表,就可以将Model::updateOrCreate()与第一个参数一起用作包含要查找的属性的关联数组,并将第二个参数用作包含任何新值的关联数组。

请参阅updateOrCreate的方法定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36736446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档