【问题标题】:Laravel 5 string as primary keyLaravel 5 字符串作为主键
【发布时间】:2020-03-16 10:05:15
【问题描述】:

我正在开发一个使用 Laravel 5.5 的项目,其中一个模型的 ID 由用户定义。在模型下方,将 $incrementing 设置为 false 并将其放在 $fillable 数组中。

class AIOpportunity extends Model
{
    protected $table = 'ai_opportunity';
    protected $primaryKey = 'id_opportunity';
    public $incrementing = false;

    protected $fillable = [
        'id_opportunity',
        'budget',
        'created_by'
    ];
}   

问题:尝试执行此查询时:

$rec = AIOpportunity::where('id_opportunity', 'abc')->first();

它在数据库中执行了以下查询:

select * from ai_opportunity where id_opportunity=abc

由于类型而引发错误。我还能做些什么让 Eloquent 明白这是一个 varchar 字段吗?

感谢您的帮助

【问题讨论】:

  • 你的错误到底是什么?
  • 表示该表不存在。确实如此,这只是当您尝试运行此查询时 MySQL 抛出的错误消息
  • 那么该表不存在。它不是 varchar 或不是。实际上varchar 接受所有字段。运行php artisan optimize,如果这不能解决您的问题,请检查您的表名
  • 可以分享一下ai_opportunity表迁移吗?
  • 添加protected $keyType = 'string';

标签: laravel laravel-5 eloquent


【解决方案1】:

我发现了问题。这不是 Laravel 的问题,我的问题中的设置没问题。问题出在我本地的数据库中。尽管该表存在并且当我通过 PhPMyAdmin 访问时看起来一切正常,但我可以在那里看到它,但也有错误消息说该表不存在。

是的,很奇怪。我刚刚删除了本地数据库并从生产中恢复了备份。有用。问题出在数据库本身,而不是 Laravel 应用程序。

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多