You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel执行php artisan db:seed出现count()参数类型错误如何解决

错误原因排查

首先可以明确:你猜测的「未给deleted_at字段赋值导致报错」不成立。deleted_at是软删除字段,默认允许为NULL,不赋值不会触发count()相关的参数错误。
这个报错本质是PHP 7.2+版本对count()函数的参数校验更严格,当代码尝试给count()传入不可数的非数组/非实现Countable接口的对象时就会抛出,Laravel版本过低和PHP版本不兼容是最常见的诱因。

解决方案

按优先级逐一排查:

1. 匹配Laravel和PHP版本

如果你的Laravel版本 <= 5.4,同时PHP版本 >=7.2,直接触发该兼容问题。可选两种修复方案:

  • 将PHP版本降级到7.1.x
  • 将Laravel升级到5.5及以上的LTS版本

2. 修正Area模型的软删除配置

你的area表包含deleted_at字段,说明启用了软删除,必须在模型中引入对应Trait,否则会出现底层逻辑异常:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Area extends Model
{
    use SoftDeletes; // 必须添加该行开启软删除
    protected $fillable = ['name']; // 允许name字段批量赋值
    protected $dates = ['deleted_at'];
}

3. 调整填充类代码写法

优先使用Eloquent的create()方法代替查询构造器的insert(),会自动处理created_at、updated_at字段,代码更简洁:

<?php
use Illuminate\Database\Seeder;
use App\Area;

class AreaTableSeeder extends Seeder
{
    public function run()
    {
        Area::create([
          'name' => 'Dhanmondi'
        ]);
    }
}

4. 确认填充类调用配置

检查database/seeds/DatabaseSeeder.php的run方法中,已经正确注册了该填充类:

public function run()
{
    $this->call(AreaTableSeeder::class);
}

5. 清理缓存后重新执行

先执行以下命令清理项目缓存:

php artisan cache:clear
php artisan config:clear

再重新执行填充命令:

php artisan db:seed

内容的提问来源于stack exchange,提问作者Osik Newton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:15:03