【问题标题】:database not inserting values in laravel?数据库没有在laravel中插入值?
【发布时间】:2019-02-23 15:39:54
【问题描述】:

下面是我的注册控制器中的一段代码。如您所见,每个字段都有一个值,但它没有插入到数据库中。如果值不存在,我已经为数据库中的这些字段配置了默认值。它使行没有默认值。我无法弄清楚问题所在。我还可以在模型中填写所有字段。

protected function create(array $data)
{
  $user = Account::create([
    'wallet' => $data['wallet'],
    'email' => $data['email'],
    'balance' => 0,
    'uqid' => rand(10000000,99999999) ,
    'ref' => 0,

  ]);
$gnl = General::first();
$track = Track::create([
    'account_id' => $user->id,
    'speed' => $gnl->dhs_free,
    'balance' => 0,
    'uqid' => rand(10000000,99999999) ,
    'ref' => 0,

  ]);

帐户模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Account extends Model
{
    protected $fillable = ['wallet','uqid','ref','bstatus','refcom','email','verified'];

   public function deposit()
   {
       return $this->hasMany('App\Deposit','id','account_id');
   }
   public function withdraw()
   {
       return $this->hasMany('App\Withdraw','id','account_id');
   }
   public function track()
   {
       return $this->hasMany('App\Track','id','account_id');
   }

跟踪模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Track extends Model
{
    protected $fillable = array( 'account_id','speed','withdraw','status');

    public function account()
    {
        return $this->belongsTo('App\Account');
    }
}

【问题讨论】:

  • 如果有解释,您可以查看日志文件吗? (storage/logs/laravel.log)
  • 我检查了很多次都没有错误
  • 你能告诉我们你得到的确切错误信息吗?
  • 1. colmn 后面的错误没有默认值。 2.如果我将默认值添加到 colmn 然后它只插入默认值而不是来自控制器
  • 请在您的问题中也发布您的模型

标签: php laravel


【解决方案1】:

使用 create 函数时,您似乎没有填写表格中的所有字段。

要么确保您为 create() 函数中的所有字段分配值,要么确保数据库中有默认值。在构建器中,使用 ->default(0) 或其他东西。

【讨论】:

  • 如您所见,我正在分配给每个字段,但它没有插入
  • 默认值错误意味着您正在尝试创建一个字段未分配值或未赋予默认值的行。仔细检查一切,你会发现你的错误
【解决方案2】:

在您的代码中可以识别的东西很少:

首先Model和create方法中列的数量和名称不同:

Account 模型包含:

protected $fillable = ['wallet','uqid','ref','bstatus','refcom','email','verified'];

但是您的创建包含:

'wallet' => $data['wallet'],
'email' => $data['email'],
'balance' => 0,
'uqid' => rand(10000000,99999999) ,
'ref' => 0,

Create 不包含 bstatus、refcom 等...列,但这些列存在于您的模型和数据库表中。

同样,Track 模型包含:

 protected $fillable = ['account_id','speed','withdraw','status'];

但它的创建包含:

'account_id' => $user->id,
'speed' => $gnl->dhs_free,
'balance' => 0,
'uqid' => rand(10000000,99999999) ,
'ref' => 0,

现在,如果您在create() 函数中未指定的列没有在数据库中指定任何默认值,您将得到:

错误:行没有默认值

解决方案要么向create() 中的这些列添加值,要么使用迁移将这些列标记为nullable

【讨论】:

  • 谢谢,但那些在注册时有默认值,并且有单独的代码来更新它们
  • 是的,但是当您执行create() 时,它是第一次插入新记录。所以独立于任何其他代码,它仍然会在这里出错:)
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 2018-06-16
  • 2022-01-06
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
相关资源
最近更新 更多