Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更新或在laravel中创建原因错误异常_Php_Mysql_Laravel_Model - Fatal编程技术网

Php 更新或在laravel中创建原因错误异常

Php 更新或在laravel中创建原因错误异常,php,mysql,laravel,model,Php,Mysql,Laravel,Model,我编写了一个登录或注册用户的代码。我使用updateOrCreate函数添加用户(如果不存在)更新一列,如果用户存在,则该列的名称为verifcode 控制器 users Table: id(auto increment primary key)|phone|verifcode|timeStmp --------------------------------- $phone=Input::get('phone'); $code=rand(1001,9999); $use

我编写了一个登录或注册用户的代码。我使用updateOrCreate函数添加用户(如果不存在)更新一列,如果用户存在,则该列的名称为verifcode

控制器

users Table:
id(auto increment primary key)|phone|verifcode|timeStmp
---------------------------------
    $phone=Input::get('phone');
    $code=rand(1001,9999);
    $user = new user;
    $user = array('phone'=>$phone);
    user::updateOrCreate($user,['verifcode' => $code]);
型号:

namespace App;

use Illuminate\Database\Eloquent\Model;

class user extends Model
{
    protected $table = 'users';
    protected $fillable = array('phone', 'verifcode','timeStmp');
    protected $guarded = array('id');
    protected $primaryKey = "id";
    public $incrementing = false;
    const CREATED_AT= false;
    const UPDATED_AT = false;

}
使用此代码,我有以下错误:
array\u key\u exists():第一个参数应该是指向
vendor\laravel\framework\src\light\Database\Eloquent\Concerns\HasAttributes.php
文件的字符串或整数

我只知道错误指向UpdateOrCreate函数的secound参数

感谢您的帮助

如果您查看,您只是使用了
updateOrCreate
方法错误。请看下面的飞行示例

在您的情况下,它应该如下所示:

$phone = \Input::get('phone')
$code  = rand(1001, 9999);
$user  = User::updateOrCreate(
           ['phone' => $phone],
           ['verifcode' => $code, 'timeStmp' => \Carbon::now()->timestamp]
         );

如果您在laravel framework code的
模型
类中看到,您可以注意到,
updated\u at
仅在不
脏的情况下存储

    if (! $this->isDirty(static::UPDATED_AT)) {
        $this->setUpdatedAt($time);
    }
但是
isDirty
方法只检查空值

public function isDirty($attributes = null)
{
    $dirty = $this->getDirty();

    if (is_null($attributes)) {
        return count($dirty) > 0;
    }

    if (! is_array($attributes)) {
        $attributes = func_get_args();
    }

    foreach ($attributes as $attribute) {
        if (array_key_exists($attribute, $dirty)) {
            return true;
        }
    }

    return false;
}
因此,只需将
false
替换为
NULL

$phone=Input::get('phone');
$code=rand(1001,9999);
user::updateOrCreate(
    ['phone' => $phone]
    ['verifcode' => $code]        
);

看看它是否对你有用。

最后我解决了它。通过将Created_at和Update_at列添加到表中,并将这两个coulmn添加到模型中的$guarded,例如
protected$guarded=array('id','Created_at','UPDATED_at')然后修复问题


谢谢你的帮助

我已经回答了。请检查并让我知道它是否适合您。谢谢谢谢,但是我想先检查一下手机,不是verifcodenothing Happened…timeStmp有默认值,不需要值你想怎么做?根据您的代码,我了解到您想检查具有给定电话号码的用户是否存在并更新代码?或者,是否要检查具有给定电话号码和代码的用户是否存在?在这种情况下,您的逻辑有问题。是的,我想检查具有给定电话号码的用户是否存在,并更新代码…但错误来自这两列…update_at和Created_at nothing elseNo无需添加Created_at,update_at column。只需在模型中执行false,如:public$timestamps=false;我想你已经添加了这两列。我也更改为false,但错误仍然存在…我测试了所有方法,但只添加了列修复了它。你最好修复另一个错误,你的解决方案不好。