راکت
حل شده

یک رابطه one to many و belongsTo در یک مدل در لاراول

2 پاسخ

@ali.bayat
@mehranmarandi90
@mhyeganeh
سلام
توی جدول users ما 2 نوع اکانت داریم
یکی نمایندگان هستن و یکی هم کاربران هستن
این دو نوع با ستون isadmin تفکیک میشن و اگر مقدار yes باشه یعنی ادمین هست و اگر no باشه یعنی کاربر عادی هست

Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name')->nullable();
            $table->string('email')->unique();
            $table->string('mobile', 11)->unique();
            $table->enum('is_admin', ['yes', 'no'])->default('no');
            $table->string('role', 100)->default('user');
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->timestamp('ended_at')->default(\Illuminate\Support\Carbon::now()->addYear());
            $table->rememberToken();
            $table->timestamps();
        });

خب حالا ما یه مشکل داریم و اون اینه که وقتی میخوایم رابطه one to many و belongsTo بزنیم چون هردو طرف از یک جدول هستن نمیدونیم به چه صورت بنویسیمش

مثلا میخوایم بگیم مثلا نماینده ali@gmail.com دارای 20 تا کاربر هست و بلعکس بگیم که مثلا کاربر 1 و 2 و 3و 4 و5 و6 و ... نمایندشون ali@gmail.com هست

چطور اینو پیاده کنیم ؟ و جوری باشه که به راحتی هم بشه جای کاربرا را بین نماینده ها عوض کنیم
مثلا با متد sync

نوب
نوب
@yk5742g
ثبت پرسش جدید

پاسخ‌ها

2
مهران مرندی
مهران مرندی
@mehranmarandi

تخصص: برنامه نویس

بهترین پاسخ

برای ایجاد روابطی که میخوایید به یک کلید خارجی برای هر ردیف نیاز دارید مثلا به اسم. parent_id
و روابط رو با اون مشخص کنید

public function parent()
    {
        return $this->belongsTo('User', 'parent_id');
    }

    public function children()
    {
        return $this->hasMany('User', 'parent_id');
    }
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

سلام

اولا برای فیلد is_admin ترجیحا از نوع boolean استفاده کنید. چون فقط دو حالت داره و خیلی بهینه تر هست.

ثانیا خوب همون طور که بالا اشاره شد‌، شما باید قبلش یک جوری بگید که این رکورد user متعلق به کدوم نماینده هست تا وقتی خواستیم کاربران یک نماینده رو بگیریم مشخص باشه. الان به هیچ وجه این قضیه شدنی نیست.

یک راهکارش (اگر رابطه شون از نوع One-to-Many هست یعنی هر نماینده چندین کاربر داره و هر کاربر فقط متعلق به یک نماینده هست ) همینه که یک فیلد بعنوان FK تعریف کنید بنام مثل admin_id و آیدی نماینده رو داخلش قرار بدید. برای نماینده ها هم که این فیلد null میشه.

شاید پاسخ شما همین‌جا باشد

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

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