دوین پس از طراحی موفقیتآمیز تمامی سوالات مسیر PHP/Laravel مسابقات المپیکفناوری، به دلیل مهارت زیاد مسئولیت جدیدی از سمت کوئرا و پارکفناوری پردیس دریافت کرده است، طراحی پیامرسان داخلی پردیسگرام برای برقراری ارتباط راحتتر و سریعتر مخصوص شرکتکنندگان در این سری مسابقات!
شما در این سوال قرار است سراغ پیادهسازی بخش کوچکی از این پیامرسان با استفاده از لاراول بپردازید. از آنجایی که رابطه دوین با رابطههای بین مدلها حسابی شکرآب است، مسئولیت پیادهسازی این رابطهها به صورتی که دوین از قبل مشخص کرده است بر عهده شما خواهد بود.
پروژهی اولیه را از این لینک دانلود کنید.
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.php artisan migrate
استفاده کنید.مایگریشنهای مربوط به پروژه از قبل ایجاد شدهاند. در اولین گام باید ساختار جداول پروژه را مطابق توضیحات زیر تکمیل کنید:
users
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
name |
string |
نام کاربر |
email |
string |
ایمیل کاربر (منحصربهفرد) |
email_verified_at |
timestamp |
زمان تایید ایمیل |
remember_token |
string |
حفظ اطلاعات ورود کاربر |
password |
string |
رمز عبور کاربر |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
profiles
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
user_id |
bigint |
کلید خارجی به جدول users |
bio |
text |
بیوگرافی کاربر |
avatar |
string |
آدرس تصویر پروفایل |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
messages
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
user_id |
bigint |
کلید خارجی به جدول users |
content |
text |
محتوای پیام |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
posts
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
user_id |
bigint |
کلید خارجی به جدول users |
channel_id |
bigint |
کلید خارجی به جدول channels |
content |
text |
محتوای پست |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
comments
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
content |
text |
محتوای کامنت |
user_id |
bigint |
کلید خارجی به جدول users |
commentable_id |
bigint |
شناسه موجودیت (پست یا پیام) |
commentable_type |
string |
نوع موجودیت (post یا message) |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
likes
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
user_id |
bigint |
کلید خارجی به جدول users |
likeable_id |
bigint |
شناسه موجودیت (پست یا کامنت) |
likeable_type |
string |
نوع موجودیت (post یا comment) |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
groups
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
name |
string |
نام گروه |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
group_user
:🔗نام ستون | نوع | تعریف |
---|---|---|
group_id |
bigint |
کلید خارجی به جدول groups |
user_id |
bigint |
کلید خارجی به جدول users |
channels
:🔗نام ستون | نوع | تعریف |
---|---|---|
id |
bigint |
کلید اصلی |
name |
string |
نام چنل |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
channel_user
:🔗نام ستون | نوع | تعریف |
---|---|---|
channel_id |
bigint |
کلید خارجی به جدول channels |
user_id |
bigint |
کلید خارجی به جدول users |
شما در این سوال صرفا قرار است تا روابط بین مدلهای پیامرسان را پیادهسازی کنید. مایگریشنها از قبل پیادهسازی شدهاند و در قالب پروژه اولیه به همراه توضیحات آنها در بخش ساختار جداول در اختیار شما قرار داده شدهاند. توضیحات روابطی که باید پیادهسازی شوند به شکل زیر است:
لیست مدلهای این پیامرسان به شرح زیر است:
User
: کاربران سیستمProfile
: پروفایل کاربرMessage
: پیامهای کاربرانPost
: پستهای ارسالشده توسط کاربران در چنلهاComment
: کامنتهای پستها و پیامهاLike
: لایکهای دادهشده به پستها و کامنتهاGroup
: گروههای کاربری شامل کاربران مختلفChannel
: چنلها که پستها در آنها ارسال میشوندتوجه: نیازی به پیادهسازی مایگریشنها در این سوال نیست و این مایگریشنها از قبل در اختیار شما قرار داده شده است. وظیفه شما در این سوال تنها پیادهسازی روابط مدلها میباشد.
توجه: تنها تغییرات مورد نیاز را در مدلها اعمال کنید تا روابط بهدرستی تعریف شوند.
توجه: پس از تعریف روابط، کل فایلهای پروژه بهجز پوشهی vendor
را زیپ کرده و ارسال کنید.
توجه: که شما مجاز به افزودن فایل جدیدی در این ساختار نیستید و تنها باید تغییرات را در فایلهای موجود اعمال کنید.
توجه: که نام فایل Zip اهمیتی ندارد.