نوب
4 سال پیش توسط نوب مطرح شد
2 پاسخ

مشکل در پرکردن چندجدول همزمان هنگام ثبت نام لاراول

سلام اساتید
من میخوام وقتی کاربر ثبت نام میکنه و ثبت نام موفق بود به جز اینکه اطلاعاتش توی جدول users میره
آیدی اون کاربر به صورت اتوماتیک در یک جدول دیگه به اسم user_profiles هم ذخیره بشه

خب من با کد زیر اینکارو کردم و ذخیره انجام میشه ولی به خطای
TypeError
Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in C:\wamp64\www\nsms\vendor\laravel\ui\auth-backend\RegistersUsers.php on line 36
برمیخورم ولی بازم کاربر ثبت نام میشه ولی خطا دارم

اینم کدهام

مدل جدول Users

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password', 'admin_id',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function user_profile(): \Illuminate\Database\Eloquent\Relations\HasOne
    {
        return $this->hasOne(user_profile::class);
    }

    public function user_log(): \Illuminate\Database\Eloquent\Relations\HasMany
    {
        return $this->hasMany(user_log::class);
    }
    public function user_panel(): \Illuminate\Database\Eloquent\Relations\HasOne
    {
        return $this->hasOne(user_panel::class);
    }

    public function user_access_has_user(): \Illuminate\Database\Eloquent\Relations\HasMany
    {
        return $this->hasMany(user_access_has_user::class);
    }
}

مدل جدول user_profiles

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class user_profile extends Model
{
    protected $fillable = [
        'user_id',
        'nameFamily',
    ];
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

فایل App/Http/Controllers/Auth/RegisterController

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use App\user_profile;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Symfony\Component\Console\Input\Input;

class RegisterController extends Controller
{

    use RegistersUsers;

    protected $redirectTo = RouteServiceProvider::HOME;
    public function __construct()
    {
        $this->middleware('guest');
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }
    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
        $user_profile = new user_profile();
        $user->user_profile()->save($user_profile);
    }
}

نسخه لاراول 7 هست
جدول user_profiles با ستون user_id به جدول users ستون id متصل شده به صورت foreinKey و onDelete cascade


ثبت پرسش جدید
مهدی
تخصص : برنامه نویس و طراح وب
@mrmmg 4 سال پیش مطرح شد
0

@yk5742g

به نظرم اگر از event ها در لاراول استفاده کنی هم بهینه تره، کدهات مشخصه و در نهایت مشکلت حل میشه


میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش آپدیت شد
0

احساس میکنم مشکل از این 2 خطه :

  $user_profile = new user_profile();
        $user->user_profile()->save($user_profile);

احیانا در خط اخر به جای $user_profile نباید $user باشه؟؟؟ من اینطوری فکر میکنم چون شما باید اطلاعات یوزر رو پاس بدین تا سیو شه
یا کاربر رو بعد از ذخیره لاگین کنید و اینطوری عمل کنید :

$user->user_profile()->save(َAuth::user());

تست کنید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام