【问题标题】:firstOrCreate continuous insert new entryfirstOrCreate 连续插入新条目
【发布时间】:2019-08-08 22:09:32
【问题描述】:

我跑

php artisan make:model Models/Test -m

创建迁移文件

Schema::create('tests', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->double('longitude', 9, 4);
        $table->timestamps();
    });

运行迁移和编辑模型

namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Test extends Model
{
     protected $fillable = ['longitude'];
     //
}

当我跑步时

$marker = Test::firstOrCreate([
    'longitude' => floatval(19.9276),
]);
echo $marker->id;

我一直看到新条目添加到数据库中。

当我将列类型更改为 varchar 时,问题不会发生。

【问题讨论】:

    标签: laravel eloquent laravel-5.8


    【解决方案1】:

    你用错了,如果你想使用 firstOr 方法,你必须给出一个值来检查是否存在。第一个数组用于搜索现有值,另一个用于新值:

        $marker = Test::firstOrCreate(
    search values ->
     [
        'longitude' => floatval(19.9276),
     ],
     [
    new values ->
     ]
    
    );
    echo $marker->id;
    

    希望对你有帮助

    【讨论】:

    • 我已经尝试过了,但是就像手册说的“如果在数据库中找不到模型,将插入一条记录,其中包含第一个参数中的属性以及可选的第二个参数中的属性。 "如果我将列数据类型更改为 varchar,它确实像
    • 如果您不想改变列的类型,那么您可以在您的请求中添加现有项目的 ID 作为隐藏输入,然后使用它进行搜索值。我认为它可以与 id 一起使用。
    • 是的,我可以更改列类型,也可以手动检查数据是否已经存在,但我想知道为什么专用于此的功能不起作用
    猜你喜欢
    • 1970-01-01
    • 2015-10-28
    • 2020-01-13
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多