updateOrCreate вызывает ErrorException в laravel - PullRequest
0 голосов
/ 27 апреля 2018

Я написал код для входа в систему или регистрации пользователей. Я использовал функцию updateOrCreate, чтобы добавить пользователя, если он не существует, обновить столбец, имя которого есть верифицированный код, если пользователь существует

контроллер

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_key_exists(): The first argument should be either a string or an integer, которые указывают на vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php файл.

Я просто знаю, что ошибка указывает на аргумент secound функции UpdateOrCreate.

спасибо за помощь

Ответы [ 4 ]

0 голосов
/ 27 апреля 2018

наконец я решаю это. добавив столбцы Created_at и Update_at в таблицу и добавив эти два кулона в $ guarded в модели, подобной этой protected $guarded = array('id','CREATED_AT','UPDATED_AT');, а затем исправим проблему

спасибо за помощь

0 голосов
/ 27 апреля 2018

Если вы видите в классе Model код фреймворка laravel, вы можете заметить, что updated_at сохраняется только тогда, когда это не dirty.

    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.

0 голосов
/ 27 апреля 2018
$phone=Input::get('phone');
$code=rand(1001,9999);
user::updateOrCreate(
    ['phone' => $phone]
    ['verifcode' => $code]        
);

Посмотрите, работает ли это для вас.

0 голосов
/ 27 апреля 2018

Если вы посмотрите на документацию Laravel , вы просто неправильно используете метод updateOrCreate. Посмотрите на пример полета там.

В вашем случае это должно выглядеть так:

$phone = \Input::get('phone')
$code  = rand(1001, 9999);
$user  = User::updateOrCreate(
           ['phone' => $phone],
           ['verifcode' => $code, 'timeStmp' => \Carbon::now()->timestamp]
         );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...