【问题标题】:Laravel Eloquent firstOrCreate doesn't work properlyLaravel Eloquent firstOrCreate 无法正常工作
【发布时间】:2022-01-26 06:32:59
【问题描述】:

我已经习惯了,但是今天这个问题让我很虚弱..;;

class Market {
    // ..
    public function ttl()
    {
        return $this->ttlRelation()->firstOrCreate(
            ['market_id' => $this->id],
            ['tier' => 0, 'direction'=>0]
        );
    }
}

Market 模型有一个 TTL 模型。我知道firstOrCreate 方法找到一个项目作为第一个给定的数组,如果它不存在创建一个新的作为持久化,返回它。

此外,它的质量分配,所以我在 ttl 模型上填写了$fillable 属性..

class TradingTacticalLayer extends Model
{
    public $timestamps = false;
    protected $fillable = ['direction', 'tier'];
}

..我收到SQLSTATE[HY000]: General error: 1364 Field 'direction' doesn't have a default value (SQL: insert into "trading_tactical_layer_test" ("tier", "market_id") values (0, 1)) 消息。我不明白为什么这种方法不会以正确的方式填充插入字段列表。我希望,如果我将$fillable 属性编辑为['direction'],SQL 会内爆(“direction”)作为插入字段而它不会。

一般来说,根据我的经验,我只是将这些字段设置为可为空或手动设置默认值。在这个时候,我想知道为什么会发生这种奇怪的事情以及我做错了什么。

【问题讨论】:

  • 验证错误是否与您发布的代码有关。
  • 你试过php artisan optimize:clear 吗?
  • 我相信optimize:clear 能以某种方式解决问题。如果你添加答案,我会检查你的。谢谢。

标签: laravel eloquent mass-assignment


【解决方案1】:

嗯,很可能,optimize:clear 解决了这个问题。

我仍然不知道是什么导致了这个错误,但是如果您遇到$fillable 属性和插入字段列表之间的不匹配,optimize:clear 无论如何都是一个选项..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2013-06-07
    • 1970-01-01
    • 2021-04-06
    相关资源
    最近更新 更多