جشنواره بهارانه راکت! ۳۵% تخفیف ویژه بر روی دوره‌های آموزشی

مشاهده دوره‌ها
ثانیه
دقیقه
ساعت
روز
Paradox
1 سال پیش توسط Paradox مطرح شد
6 پاسخ

روابط بین استان و شهر

سلام
من 3 تا جدول دارم
اولی استان
دومی شهر
سومی منطقه

حالا تو دیتابیس برای جدول استان فیلد userid گذاشتم
برای جدول شهر فیلد provinceid
و برای جدول منطقه فیلد cityid

میخام بدونم تا اینجا کارم درسته ؟
و توی مدل ها

مدل user

    public function provinces()
    {
        return $this->hasMany(Province::class);
    }

مدل استان

 public function cities()
    {
        return $this->hasMany(City::class);
    }

مدل شهر

   public function regions()
    {
        return $this->hasMany(Region::class);
    }

میخام بدونم درست پیش رفتم یا اشتباهه
ممنون میشم راهنمایی کنید


ثبت پرسش جدید
حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 1 سال پیش آپدیت شد
0

سلام @codeLover
مدلها برای حالتی که هر کاربر به صورت نامحدود بتونه آدرس تعریف کنه درسته. اما جایگاه فیلدها رو نامناسب تعریف کردید.
مثلا چرا باید توی جدول استان ها userid تعریف کنید!؟
در واقع راه بهتر اینه که سه تیبل برای استان و شهر و منطقه داشته باشید. به همون کشلی که الان قرار دادید منتها userid در تیبل provinces لازم نیست.
سپس توی تیبل آدرس ها موارد بعدی رو تعریف کنید.
باز دو راه دارید هم می تونید در صورت نیاز و برآورد استان و شهر و منطق رو توی تیبل آدرس برای هر کاربر تعریف کنید و هم می تونید فقط به ذخیره منطقه اکتفا کنید و بر اساس روابط بین مناطق و شهر و استان آدرس کامل رو واکشی کنید.
در این صورت فراموش نکنید روابط بین جدول استان و شهر و همچین شهر و مناطق رو ایجاد کنید.


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش آپدیت شد
0

@hekmati
به این شکل باید باشه جداول؟

 Schema::create('provinces', function (Blueprint $table) {
            $table->id();
            $table->string('province');
            $table->timestamps();
        });

        Schema::create('cities', function (Blueprint $table) {
            $table->id();
            $table->string('city');
            $table->timestamps();
        });

        Schema::create('city_province' , function(Blueprint $table) {
            $table->unsignedBigInteger('city_id');
            $table->foreign('city_id')->references('id')->on('cities')->onDelete('cascade');
            $table->unsignedBigInteger('province_id');
            $table->foreign('province_id')->references('id')->on('provinces')->onDelete('cascade');
            $table->primary(['city_id' , 'province_id']);
        });

        Schema::create('regions', function (Blueprint $table) {
            $table->id();
            $table->string('region');
            $table->timestamps();
        });

        Schema::create('region_user' , function(Blueprint $table) {
            $table->unsignedBigInteger('region_id');
            $table->foreign('region_id')->references('id')->on('regions')->onDelete('cascade');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('')->onDelete('cascade');
            $table->primary(['region_id' , 'user_id']);
        });

حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 1 سال پیش مطرح شد
0

جدول city_province یک فرایند اضافی است هر شهر فقط عضو یک استان هست پس کافیه در جدول cities فیلد province_id رو قرار بدید.
برای جدول محله هم همینطوره چون یک محله همیشه عضو یک **** پس در تیبل regions کافیه ،یلد city_id رو قرار بدید.
به جای تیبل region_user هم بهتره یک تیبل تحت عنوان آدرس داشته باشید که اگر یک کاربر بیش از یک آدرس معرفی کرد بتونید استان و شهر و محله و خیابان و پلاکش رو ذخیره کنید.
اگر محله رو برای چیزی غیر از آدرس لازم دارید توضیح بدید.


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش آپدیت شد
0

@hekmati
من میخام کاربر بعدا بتونه استان و شهر و تغییر بده اگه موقعیت مکانیش تغییر کرد و همینطور بتونه یک یا تمامی منطقه هارو انتخاب کنه
پس جدول واسط فقط یدونه میخاد درسته ؟
به این شکل که تو جدول شهر provinceid
تو جدول منطقه cityid
و یک جدول باید رابطه بین userid و regionid ایجاد بشه
درسته ؟
به اطلاعات دیگه مثل پلاک و این موارد نیاز ندارم

مدل هارو به این شکل ایجاد کردم

مدل استان 

public function cities()
    {
        return $this->hasMany(City::class);
    }
مدل شهر 
public function regions()
    {
        return $this->belongsToMany(Region::class);
    }

اینا درسته ؟
تو مدل user و region به چه شکل باید ریلشن رو بزارم ؟ از نوع blongsToMany باید باشه جفتش؟


حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 1 سال پیش مطرح شد
0

سلام @codeLover
برای مدل region در مدل city هم از hasMany استفاده کنید.
حالا شما یک تیبل استان یک شهر و یک محله دارید که روابطش رو هم شکل دادید.
حالا هنوز نفرمودید دارید آدرس کاربر رو ثبت می کنید یا فقط محله کاربر بدون ثبت آدرس براتون مهمه.
ادامه کار بستگی به هدف شما داره


Paradox
تخصص : در حال یادگیری
@paradox 1 سال پیش آپدیت شد
0

@hekmati
کل روند کاری که دارم انجام میدم
کاربر اول با شماره موبایل ثبت نام میکنه
بعد میخام استان و شهر و منطقه رو وارد کنه دیگه نمیخام ادرس دیگه ای وارد کنه

یک سری اطلاعات دیگه مثلا اسم و سن و جنسیت میخام تو فرم بعدی وارد بشه و تمام
و بعدا تو پروفایلش اطلاعاتش رو نمایش بدم که این کاربر مشخصاتش چیه و کدوم استان و شهر ساکنه همین

فقط نمیدونم این جدول واسط درست هست یا نه

Schema::create('provinces', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

        Schema::create('cities', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->foreignId('province_id')->constrained()->cascadeOnDelete();
            $table->timestamps();
        });

        Schema::create('regions', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->foreignId('city_id')->constrained()->cascadeOnDelete();
            $table->timestamps();
        });

        Schema::create('region_user' , function(Blueprint $table) {
            $table->foreignId('region_id')->constrained()->cascadeOnDelete();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->primary(['region_id' , 'user_id']);
        });

مدل استان

    public function cities()
    {
        return $this->hasMany(City::class);
    }

مدل شهر


    public function provinces()
    {
        return $this->belongsTo(Province::class);
    }

    public function regions()
    {
        return $this->hasMany(Region::class);
    }

مدل منطقه

    public function City()
    {
        return $this->belongsTo(City::class);
    }

    public function users()
    {
        return $this->hasMany(User::class);
    }

مدل یوزر

    public function regions()
    {
        return $this->belongsTo(Region::class);
    }

اینها درسته ؟ یا باز هم اشتباهی هست ؟


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

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