【问题标题】:Laravel updateOrCreate with auto-incremental databaseLaravel updateOrCreate 与自动增量数据库
【发布时间】:2014-12-15 07:38:18
【问题描述】:

我的目的是更新该值是否存在,否则在提交表单后在数据库表中插入新行

问题是,这里的函数在数据库表中添加新列,而不是更新它们。

这是我的功能:

MyModel::updateOrCreate(array(
    'myField' => 'myValue',
))
    ->where('myAutoIncrementalField', '=', '5')
    ->where('myPrimaryKey', '=', '8');

我的数据库表是这样的:
1. myPrimaryKey(非自动增量,可在模型上填写。)
2. myAutoIncrementalField(自动增量,不能在模型上填写。)

提前谢谢你。

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案1】:

    这是你使用这个方法的方式:

    Model::updateOrCreate(
       ['primary_key' => 8],
       ['field' => 'value', 'another_field' => 'another value']
    );
    

    作为第一个参数,传递一个唯一的字段数组,或者在您的情况下是主键。显然,非唯一字段在这里没有意义,就像在 PK 中传递任何东西一样。

    第二个参数是一个值数组,也应该更新/创建,但在 unique/pk 搜索中被忽略。

    【讨论】:

    • 它有效。这正是我想要的。我在 Laravel API 或文档中找不到任何文档,如果您分享如何分析此类问题的方式,我将不胜感激。感谢您的帮助。
    • 嗯,我知道 Eloquent 的来龙去脉。但如果我不这样做,我可能会打开vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php 文件并检查源代码。 Laravel 源代码几乎包含 cmets 中的所有内容。代码库的更新频率比文档要高得多,因此您不会在 laravel 网站上的文档中找到所有内容,但您始终掌握源代码。
    【解决方案2】:

    您不能在此方法中使用 where 函数。您必须在数组中包含 where 子句。

    MyModel::updateOrCreate(array(
        'myField' => 'myValue',
        'myAutoIncrementalField' => '5',
        'myPrimaryKey' => '8'
    ));
    

    【讨论】:

    • 到目前为止我尝试了这个想法,但 updateOrCreate 看起来并不关心 myAutoIncrementalField 的值。 myAutoIncrementalField 值来自一个变量,它是一个增量“for 循环”值。我会检查一下,让你知道新的测试。
    • 你从哪里发现这个函数的存在?我在文档或 api 的任何地方都找不到它。
    • 可以在laravel api中搜索Model::updateOrCreate。
    猜你喜欢
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多