علی محمدی
4 سال پیش توسط علی محمدی مطرح شد
15 پاسخ

ریلیشن در php

با سلام و احترام
دوستان من با php خام کد نویسی می کنم.
من میخوام چند تا انبار تعریف کنم که محصولات داخل هر انبار قرار بگیره.
و دو چیز رو بتونیم ببینیم:
هر انبار چه محصولاتی داره
و هر محصول توی چه انباری هست.
من خودم به این نتیجه رسیدم : 👇
توی دیتابیس باید یک جدول برای انبار و یکی برای کالا درست کنم و به یک جدول واسط هم نیاز دارم که توش ذخیره کنم چه کالایی در چه انباری موجود هست.
حالا چطور می تونم relation رو پیاده سازی کنم؟
ممنون میشم راهنمایی بفرمایید.
@mohaligateway
@hesammousavi
@ali.bayat
@mhyeganeh
@juza66


ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 4 سال پیش مطرح شد
1

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

اگر هر محصول توی چند انبار هست ( که یکم بی معنیه ولی خب) و هر انبار چندین محصول داره ارتباط چند به چنده
سه تا جدول داری
انبار
محصولات
ارتباط(مشخص کننده ی محصول و انبار)

در جدول رابط فقط میگی چه ایدی محصولی در چه انباری هست
اگر این محصول داخل دو تا انباره دو سطر نوشته میشه براش
مثلا محصول با ایدی ۱ هم در انبار با ایدی ۲ هست , و هم در انباری با ایدی ۱
(پیشنهاد میشه به جای محصول دسته بندی هارو مشخص کنی که توی چه انباریه و برای محصولات دسته بندی مشخص کنی )
بگذریم
من یک نمونه بهت نشون میدم خودت نیازتو از روش بردار

سه تا جدول ساختم و توشون داده هایی رو قرار دادم و یک کوئری ساده زدم که همه ی انبار هارو با محصولات داخلش و قیمت محصول مثلا نشون میده بهت

کدی هم که زدم قرار دادم برات

SELECT stores.name,
products.name,
products.price
FROM store_product
INNER JOIN stores
ON stores.id=store_product.store_id
INNER JOIN products
on products.id=store_product.product_id

tables

rows

result


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

پیشنهاد من استفاده از یکی از ORM های موجود برای زبان PHP هست
مثل:


علی محمدی
@sajad.zangeneh20 4 سال پیش آپدیت شد
0

ممنون
ولی طریقه استفاده شون به چه شکله؟
@ali.bayat


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

اکثر این ابزارها کار با لایه داده ها رو به مفهومی به نام Model واگذار میکنند
به این ترتیب که هر کلاس Model میتونه نماینده یه Table در دیتابیس باشه
و میتونه بین این مدل ها رابطه هم وجود داشته باشه.

در کنارش معمولا یه سری Schema Builder هم موجوده که میشه باهاش ساختار دیتابیس رو نسخه بندی کرد

دقیقا سیستمی که در اکثر فریم ورک های PHP داریم

لینک های مستندات رو براتون گذاشتم


علی محمدی
@sajad.zangeneh20 4 سال پیش مطرح شد
0

خیلی ممنون از پاسخگویی تون.
یعنی با inner jon ها نمیشه پیاده سازی کرد؟
آخه پروژه اونقدر بزرگ نیست.
@ali.bayat


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

چرا . جوین ها دقیقا چاره کار هستند
حتی خود لاراول هم برای اکثر روابطش از جوین ها استفاده میکنه.

با ORM سورس کدت نظم بهتری داره، و اگر پروژه هم بزرگ نیست پس نیازی به نگرانی هم نیست که ORM روی پرفرمنس اثر بگذاره. از طرفی با الکوئنت میتونی کوئری های خامت رو هم به راحتی اجرا کنی (در کنار امکاناتی کامل برای کار با دیتابیس)

دیگه انتخابش با خودت


علی محمدی
@sajad.zangeneh20 4 سال پیش مطرح شد
0

خب من اگه بخوام از Jon ها استفاده کنم ، به چه شکل باید بنویسیم به عبارتی رابطه ای که برای محصولات و انبار وجود داره، یک رابطه چند به چند هست ؟ و اگه هست کدش به چه شکل خواهد بود؟
@ali.bayat


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

اگر ساختار جدول هات رو طراحی کردی به اشتراک بگذار


علی محمدی
@sajad.zangeneh20 4 سال پیش مطرح شد
0

سلام مجدد
خیر، من پروژه که می خوام پياده کنم فقط این دو دیتابیس رو داره، خیلی سادس، فقط صرفا برای تمرینه.
@ali.bayat


علی محمدی
@sajad.zangeneh20 4 سال پیش مطرح شد
0

دوستان لطفا راهنمایی کنید.
@juza۶۶
@mhyeganeh
@hesammousavi
@mohaligateway


سعید نوروزی
تخصص : برنامه نویس بک اند
@saeednorouzi98 4 سال پیش آپدیت شد
0

سلام

بهترین راه استفاده از join های SQL هست این لینک رو یه نگاه بنداز انگلیسی هست ولی ساده توضیح داده کمکت میکنه بحث join های SQL رو راحت درک کنی با تصویر و کد توضیح داده که از join ها چطور استفاده کنی و نتیجه هرکدوم چی هست

https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

با این تقریبا دستت میاد که join ها روی 2 تا جدول چطور کار میکنند دیگه بعدش برای اینکه چندتا جدول رو با هم join کنی کارت راحت تره یه سرچ بزنی اتصال چندتا به هم رفرنس براش پیدا میکنی


woz
تخصص : fan of open source world
@wozniak 4 سال پیش مطرح شد
0

@sajad.zangeneh20
سلام
بیشتر پروژه شما در دیتابیس قابل پیاده سازی هست
اگر پروژتون در همین حد هست و میخواید ساختار دیتابیس رو طراحی کنید ، کافیه به صورت زیر باشه :

  • یک table دارای فیلد id منحصر به فرد برای انبارها : دیگر فیلدهای مورد نیازتونم بهش اضافه کنید ...
  • یک table دارای فیلد id منحصر به فرد برای محصولات و یک فیلد store_id برای ذخیره و انتساب ایدی انباری که هر محصول توش قرار میگیره.
    حالا وقتی می خواید انبار محصول رو بگیرید و یا همه محصولات یک انبار رو از join ساده استفاده می کنید و query بزنید

محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 4 سال پیش مطرح شد
0

سلام
به نظرم نیاز نیست اینقد پیچیدش کنی دیتابیس رو و به جدول رابط نیازی نیست
چون هر محصولت خواه نا خواه باید داخل یک انبار باشه پس به جدول محصولت یک فیلد انبار اضافه کن فقط
یک جدول هم برای اسامی انبار ها
شما در جدول واسط باید بیای به اضای هر محصول بگی توی این انبار هست که افزونگی داری چون نام انبار و نام محصول رو باید برای هر کدوم توی اون جدول قرار بدی
ولی با این کار فقط یک فیلد رو ذخیره میکنی و از ذخیره ی فیلد دیگه جلوگیری میشه

ولی اینو بگم که اگر برای محصولاتت دسته بندی مشخص کردی
مثلا کالای دیجیتال - سلامت - خودرو - ورزشی - کتاب
و دسته بندی داری براشون
میتونی جدول واسط رو بگی چه دسته بندی ای در چه انباری هست
اینطوری تعداد سطر هات ب تعداد دسته بندی هات میشه و خیلی کاهش پیدا میکنه
بستگی به پیاده سازی فعلی دیتابیستون هم داره
اگر دسته بندی نداری روش زیر خیلی راحت برای یک محصول انبارش رو مشخص میکنه
ولی این برای یک پروژه ی کوچیک مناسبه
چون توی حالت پیشرفته تر شما دسته بندی داری برای محصولاتت که اونم باید ببینیم توی جدول واسطی هست یا یه فیلد اضاف شده توی جدول محصولت ( بنا به رابطه ی یک به چند یا چند به چند بودنش )


stores
    id - integer
    name - string

products

    id - integer
    name - string
    .
    .
    .
    store_id - integer

علی محمدی
@sajad.zangeneh20 4 سال پیش مطرح شد
0

@wozniak
سلام
من می خوام از رابطه چند به چند استفاده کنم.
این توضیحاتی که شما فرمودید میشه رابطه یک به چند؟


علی محمدی
@sajad.zangeneh20 4 سال پیش مطرح شد
0

من اگه بخوام یک جدول واسط، یعنی هم جدول محصولات و هم جدول انبار و یک جدول واسط داشته باشم باید چه کاری انجام بدم؟
@salar.mohammad2013


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 4 سال پیش مطرح شد
1

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

اگر هر محصول توی چند انبار هست ( که یکم بی معنیه ولی خب) و هر انبار چندین محصول داره ارتباط چند به چنده
سه تا جدول داری
انبار
محصولات
ارتباط(مشخص کننده ی محصول و انبار)

در جدول رابط فقط میگی چه ایدی محصولی در چه انباری هست
اگر این محصول داخل دو تا انباره دو سطر نوشته میشه براش
مثلا محصول با ایدی ۱ هم در انبار با ایدی ۲ هست , و هم در انباری با ایدی ۱
(پیشنهاد میشه به جای محصول دسته بندی هارو مشخص کنی که توی چه انباریه و برای محصولات دسته بندی مشخص کنی )
بگذریم
من یک نمونه بهت نشون میدم خودت نیازتو از روش بردار

سه تا جدول ساختم و توشون داده هایی رو قرار دادم و یک کوئری ساده زدم که همه ی انبار هارو با محصولات داخلش و قیمت محصول مثلا نشون میده بهت

کدی هم که زدم قرار دادم برات

SELECT stores.name,
products.name,
products.price
FROM store_product
INNER JOIN stores
ON stores.id=store_product.store_id
INNER JOIN products
on products.id=store_product.product_id

tables

rows

result


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

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