Armin Rahmati
4 سال پیش توسط Armin Rahmati مطرح شد
7 پاسخ

طراحی جدول دیتابیس در لاراول

@ali.bayat
@mohsenbostan
سلام به دوستان.
من میخوام سایتی مشابه دیوار ایجاد کنم و کاربر بتواند املاک زیر را ثبت کند.

آپارتمان فروشی
آپارتمان اجاره ای
ویلا فروشی
ویلا اجاره ای
مغازه فروشی
مغازه اجاره ای
مطب و دفتر فروشی
مطب و دفتر اجاره ای

همچنین هر ملک اطلاعاتش فرق میکنه، حالا سوال من اینه با توجه به اینکه اطلاعات هر ملک تفاوت داره باید 8 تا جدول ایجاد کنم یا با یه جدول هم میشه اطلاعات هر ملک رو ثبت کرد؟


ثبت پرسش جدید
صادق عمراني
تخصص : رئیس اداره فناوری اطلاعات
@omrani104 4 سال پیش مطرح شد
0

به نظر من اگر جدول با این چند تا فیلد باشه فقط کافیه یه فیلدی مثلا به نام type_estate که انواع موارد را با یک کد نگهداری کنید. فیلد هایی که برای همه نیاز به تکمیل اون نیست را null کنید . حالا برای خوندن رکورد ها به فیلد type_estate نگاه می کنه اگر id ویا کد برابر اون چیزی که می خواستید مثلا آپارتمان فروشی فقط فیلد های مورد نظرتون را بهتون بده.
اگر بخواهید از جداول واسط استفاده کنید باید همون تعداد جدول باید بسازید .


مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 4 سال پیش مطرح شد
0

سلام وقتتون بخیر.
نیاز به ساخت ۸ تا جدول نیست. روشی که توی این جور مواقع مرسومه استفاده از meta هاست.

یعنی یه جدول درست می‌کنید و اطلاعاتی که برای هر نوع از محصولات فرق می‌کنه رو میریزید اون تو با یه key و value.

مثلا اگر مغازه یک مقداری به اسم x نیاز داره که بقیه محصول‌ها نیاز ندارن، توی اون جدول metas که دارید، می‌تونید آیدی هر مغازه‌ای که می‌سازید رو بدید و key رو x بدید و value رو هر چیزی که دوست دارید.

وردپرس هم برای ذخیره کردن اطلاعات کاربرا از meta attribute ها استفاده می‌کنه.

این لینک رو نگاه کنید.

و این پکیج هم دقیقا همین کاری که شما می‌خواید رو انجام میده ولی دقیق نخوندم به چه روشی.


Armin Rahmati
@arminrahmati999 4 سال پیش مطرح شد
0

@ali.bayat
@MehdiAghighi
@mohsenbostan
من متوجه نشدم.
لطف کنید طبق این جدول بگین من چیکار کنم؟
فرض کنید اطلاعات مورد نیاز ثبت یک آپارتمان به صورت زیر است.

Schema::create('estates', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            $table->string('title');
            $table->text('description');
            $table->string('city');
            $table->text('images');
            $table->text('address');
            $table->integer('area');
            $table->string('rent');
            $table->string('deposit');
            $table->string('price');
            $table->integer('roomCount');
            $table->integer('year');
            $table->integer('floor');
            $table->string('elevator');
            $table->string('parking');
            $table->string('depot');
            $table->string('slug');
            $table->timestamps();
        });

حالا فرض کنید برای ثبت آپارتمان فروشی به همه فیلدها نیاز داریم به جز

$table->string('rent');
$table->string('deposit');

و برای ثبت آپارتمان اجاره ای به همه فیلدها نیاز داریم به جز

$table->string('price');

همچنین من مدل های خودم را به صورت زیر تعریف کردم، آیا درسته؟
مدل Estate

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

مدل User

public function estate() {
    return $this->hasMany(Estate::class);
}

مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 4 سال پیش آپدیت شد
2

ببینید شما گفتید که برای آپارتمان اجاره‌ای نیازی به price ندارید.
خب پس کلا فیلد price رو حذف کنید.

حالا یه جدول دیگه درست کنید مثلا به اسم estates_metas که رابطه یک به چند داره به هر estate.

خب حالا فرض کنید می‌خواید یک آپارتمان فروشی بزارید. شما نیاز به فیلد price دارید ولی اون رو از جدول estates حذف کردید.

کاری که باید بکنید اینه:

  • یک رکورد داخل estates_metas می‌زارید که دو تا فیلد داره: یکی key که اون رو برابر price قرار می‌دید و یکی value که مقداری که دوست‌ دارید رو می‌زارید براش.

بعدش هم estateid ( توی تیبل estates_metas ) رو برابر آیدی اون آپارتمان فروشی که قرار دارید می‌زارید.

حالا داخل مودل Estate یک ریلیشن تعریف می‌کنید بین estates و estates_metas مثلا به اسم متود metas که تمام رکورد‌هایی که مربوط به اون estate مورد نظر شما میشه رو بیاره.

متاسفانه توضیح دادنش توی متن یه خورده سخته نمی‌تونم حرفم رو درست منتقل کنم.

توی این لینک می‌تونید در مورد Metadata بخونید. یه مفهموم کلی هستش که خیلی استفاده داره.


Armin Rahmati
@arminrahmati999 4 سال پیش مطرح شد
-2

@MehdiAghighi
امکانش هست آیدی تلگرامتونو بدین تا بهتون پیام بدم و از طریق دیسکورد واسم درستش کنید؟


coarad supp
تخصص : برنامه نویس لاراول
@coaradsupp 4 سال پیش مطرح شد
0

سلام، اگه سوالتونو درس متوجه شده باشم الان این ها دسته بندی هستند، شما برای این دسته بندی ها یه جدول درست کنید به اسم ویژگی، هر دسته بندی یه سری ویژگی برا خودش داره،که رابطش یک به چنده

چیزی شبیه به این میشه

https://laravelsd.com/share/K5oG9a


مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 4 سال پیش مطرح شد
0

@arminrahmati999 اکانت تلگرامم هستش روی پروفایلم.

@coaradsupp همون چیزی که من گفتم رو ساده‌ترش رو گفت تقریبا.


صادق عمراني
تخصص : رئیس اداره فناوری اطلاعات
@omrani104 4 سال پیش مطرح شد
0

به نظر من اگر جدول با این چند تا فیلد باشه فقط کافیه یه فیلدی مثلا به نام type_estate که انواع موارد را با یک کد نگهداری کنید. فیلد هایی که برای همه نیاز به تکمیل اون نیست را null کنید . حالا برای خوندن رکورد ها به فیلد type_estate نگاه می کنه اگر id ویا کد برابر اون چیزی که می خواستید مثلا آپارتمان فروشی فقط فیلد های مورد نظرتون را بهتون بده.
اگر بخواهید از جداول واسط استفاده کنید باید همون تعداد جدول باید بسازید .


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

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