php - 使用 Laravel 的 Fluent 插入忽略

标签 php mysql laravel

有没有一种快速的方法来修改 Laravel's Fluent 生成的 SQL 查询?有一个 INSERT IGNORE 而不是通常的 INSERT

我正在尝试插入一个包含五十个元素的数组。手动写出整个查询将使代码膨胀并使其更容易出现人为错误。

最佳答案

在你的模型中试试这个魔法:

public static function insertIgnore($array){
    $a = new static();
    if($a->timestamps){
        $now = \Carbon\Carbon::now();
        $array['created_at'] = $now;
        $array['updated_at'] = $now;
    }
    DB::insert('INSERT IGNORE INTO '.$a->table.' ('.implode(',',array_keys($array)).
        ') values (?'.str_repeat(',?',count($array) - 1).')',array_values($array));
}

像这样使用:

Shop::insertIgnore(array('name' => 'myshop'));

如果“名称”属性是唯一键,这是防止在多用户环境中使用 firstOrCreate 可能发生的约束冲突的好方法。

关于php - 使用 Laravel 的 Fluent 插入忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622341/

相关文章:

php - 为什么 Doctrine 查询运行缓慢?

php - Laravel 5 从 PayPal API 捕获 400 响应

php - 我想将文件从一个文件夹复制到专用服务器中的另一个文件夹

php - AJAX未运行成功函数

php - 问号等于,不适用于 php

mysql - 获取一个巨大的压缩文件的最后一行

Php Imap 获取电子邮件

php - 将表单信息发送到存储在数据库中的电子邮件

javascript - 如何仅计算每个选中的复选框

laravel - 使用 laravel blade 从 url 获取当前页面名称