راکت
حل شده

ریلیشن در php

15 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

15
محمد رضا
محمد رضا
@salar.mohammad2013

تخصص: Full Stack Developer

بهترین پاسخ

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

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

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

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

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

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

تخصص: توسعه دهنده ارشد وب

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

علی محمدی
علی محمدی
@sajad.zangeneh20

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

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

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

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

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

علی محمدی
علی محمدی
@sajad.zangeneh20

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

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

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

علی محمدی
علی محمدی
@sajad.zangeneh20

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

علی محمدی
علی محمدی
@sajad.zangeneh20

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

علی محمدی
علی محمدی
@sajad.zangeneh20

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

سعید نوروزی
سعید نوروزی
@saeednorouzi98

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

سلام

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

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

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

woz
woz
@wozniak

تخصص: fan of open source world

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

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

تخصص: Full Stack Developer

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

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


stores
    id - integer
    name - string

products

    id - integer
    name - string
    .
    .
    .
    store_id - integer
علی محمدی
علی محمدی
@sajad.zangeneh20

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

علی محمدی
علی محمدی
@sajad.zangeneh20

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

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

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