【问题标题】:Eloquent Model, Illegal offset type error on non-date field雄辩的模型,非日期字段上的非法偏移类型错误
【发布时间】:2017-01-17 20:23:30
【问题描述】:

当我尝试创建 UserFailedLogin 对象时,我收到了非法偏移类型错误。当我仔细观察时,它似乎正在尝试将 ip 地址列转换为日期。该列不是数据库中的日期,也不是模型的 $date。

这是我的模型:

class UserFailedLogin extends Model {

public $timestamps = false;
protected $table = 'user_failed_login';
protected $fillable = ['ip','email'];
protected $primaryKey = ['invalid_login_id'];

这是我的创建声明:

UserFailedLogin::create(['ip' => $request->ip(), 'email'=>$email,]);

我的错误:

Model.php 第 2759 行中的 ErrorException:

非法偏移类型

  1. 在 Model.php lne 2759
  2. 在 HandleExceptions->handleError('2', '非法偏移类型', '.../vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php', '2759', array()) 在 Model.php 第 2759 行
  3. 在 Model->getCasts() 在 Model.php 第 2743 行
  4. 在 Model.php 第 2774 行中的 Model->hasCast('ip', array('date', 'datetime'))
  5. 在 Model->isDateCastable('ip') 在 Model.php 第 2863 行

【问题讨论】:

    标签: laravel attributes eloquent


    【解决方案1】:

    我认为问题在于您的主键是一个数组,而不仅仅是一个字符串。

    尝试将其更改为: protected $primaryKey = 'invalid_login_id';

    getCasts 正在寻找一个字符串,而不是一个数组或对象。

    【讨论】:

      【解决方案2】:

      ->ip()不是函数,是成员访问器,应该是->ip或者->get('ip')。也就是说,除非您创建了一个自定义的 Request 类来实现 IP 函数,尽管鉴于您的堆栈跟踪,我认为情况并非如此。

      【讨论】:

      • 感谢您抽出宝贵时间查看我的问题。 ->ip() 确实返回了我的 IP 地址,但无论如何这不是问题。当我硬编码值而不是调用任何 ip 函数时,我仍然会收到错误消息。 (事实上​​,在这两种情况下,我的 ip 都显示在堆栈跟踪中。)
      【解决方案3】:

      出现这个问题是因为 eloquent 认为您的主键是复合主键,导致您将其添加到数组中,在您的情况下只需将主键设为字符串,在真正的复合主键中您应该使用 "Mass Updates"。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-01-28
        • 1970-01-01
        • 2011-01-12
        • 2013-03-24
        • 2019-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        相关资源
        最近更新 更多