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

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

@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


ثبت پرسش جدید
مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش مطرح شد
1

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

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

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

محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

سلام

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

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

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


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

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