【问题标题】:Can't add variable to table, that starts with underscore (Laravel)无法将变量添加到表中,以下划线开头(Laravel)
【发布时间】:2019-06-11 13:10:02
【问题描述】:

我无法为 MySQL 添加价值,因为行名以 _ 开头

SQLSTATE[HY000]:一般错误:1364 字段 '_user_id' 没有 默认值

我无法更改 SQL 表首选项,因为我们正在用旧数据库编写新项目。

     $attributes = request()->validate([
        'cert_id' => 'required',
        'issuer_country' => 'required',
        'is_flag' => '',
        'is_unlimited' => '',
        'issuer' => '',
        'from_date' => 'required',
        'to_date' => 'required',
        'licence_number' => 'required',
     ]);

     $attributes['_user_id'] = 1;

     SeamanCert::create($attributes);

     class SeamanCert extends Model
     {
         protected $guarded = [];
         public $timestamps = false;
     }

【问题讨论】:

  • _user_id 是否在您的 $fillable 属性中的 SeamanCert 模型中?
  • 对不起,我以为是,但它没有...我已保护 $guarded = [];

标签: php mysql laravel


【解决方案1】:

这是因为 Eloquent 拒绝以下划线开头的列。

试试这个:

DB::table('table_name')->insert($attributes);

【讨论】:

  • "这是因为 Eloquent 拒绝以下划线开头的列。" 你对此有什么参考吗?
  • 没有,但你可以试试。例如,如果你定义了两个自定义属性user_id_user_id,那么你不能单独访问它们,你只能为两者定义getUserId()方法,这会导致冲突和错误。因为 Eloquent 在这种情况下拒绝下划线。 @kerbholz
【解决方案2】:

Laravel 命名link 有一个约定。

正如Motia 所说,命名约定可以帮助您避免错误。

如果您无法更改数据库表,则应考虑使用 Query Builder 而不是 Eloquent。

【讨论】:

    猜你喜欢
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多