Laravel Eloquent firstOrCreate 无法正常工作

Laravel Eloquent firstOrCreate doesn't work properly

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

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

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

此外,它的质量分配所以我在 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 将内爆(“方向”)作为插入字段,但它不会。

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

嗯,大概,optimize:clear解决问题。

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