#php #laravel
Вопрос:
В настоящее время я создаю систему регистрации (с laravel 8), которая проверяет IP-адрес регистрации пользователя для предотвращения мошенничества, создает новый экземпляр и сохраняет его в базе данных, если связанный IP-адрес не имеет предыдущей записи в реестре. Однако после отправки регистрационной формы на сервер я столкнулся со следующей ошибкой.
Attempt to assign property "referer_uid" on null
Я могу успешно запустить код, если закомментирую либо $ip_exists, либо $log_referral. Однако они не могут сосуществовать одновременно.
RegisterController.php
<?php
use AppModelsLogReferral;
//...
$user = User::create([
'name' => $data['name'],
'safe_code' => Hash::make($data['safe_code']),
'register_ip' =>$ip,
'last_login_ip' =>$ip,
'referral_code' => Str::random(12),
'password' => Hash::make($data['password']),
]);
//...
$referer_info = User::where('referral_code',$referer)->first();
$ip_exists = LogReferral::where('ip',$ip)->first();
if(!$ip_exists){
$log_referral = new LogReferral;
$log_referral->referer_uid = $referer_info->id;
$log_referral->referee_uid = $user->id;
$log_referral->reward = $coin_reward;
$log_referral->ip = $ip;
$log_referral->result = "1";
$log_referral->save();
}
миграция log_referrals
Schema::create('log_referrals', function (Blueprint $table) {
$table->id();
$table->string('referer_uid');
$table->integer('referee_uid');
$table->integer('reward');
$table->string('result');
$table->string('ip');
$table->timestamps();
});
Обновить
Если запись существует в $ip_exists, программа завершит работу с указанной выше ошибкой. Однако, если $ip_exists не может найти какую-либо запись, все работает нормально.
Комментарии:
1. $user->идентификатор; я думаю, это неправильно,. $referer_info содержит данные пользователя
2. также $log_referral->ip = $ip; здесь в таблице log_referrals отсутствует столбец ip при миграции
3. Спасибо за напоминание @JohnLobo ! Я обновил код. Я могу успешно вставить в базу данных, если закомментирую строку $ip_exists.
4. Если вы закомментируете все внутри условного после
$log_referral = new LogReferral;
, это приведет к ошибке?