حسین شیری نژاد
3 سال پیش توسط حسین شیری نژاد مطرح شد
6 پاسخ

نام گذاری متدها در روابط چند به چند

سلام دوستان گرامی
فرض کنید ما دو تا جدول به نام های users و videos داریم
که تعداد بازدید ویدیوها توسط کاربرو رو میخوام داشته باشیم و
همین طور میخوایم که هر کاربر بتونه ویدیوها رو به علاقه مندیهای خودش اضافه بکنه.
اینجا دو تا جدول واسط برای این کار نیاز است که تعداد بازدیدها و علاقه مندی ها رو ذخیره کنه.
اما مشکل من این است که اسم این متدهای روابط داخل مدل ها رو چی بزارم.
سردرگم شدم.
دو تا جدول میانه هم , هم اسم میشن اما من اسم یکی رو views و دریگری رو favoriets گرفتم و دراخل متد ریلیشن اسم جدولو معرفی میکنم.
اما اسم متدها رو چی بزارم؟ ما برای هر رابطه دو متد در هر مدل داریم و در کل برای این دو رابطه باید چهار متد تعریف کنم اما اسامیشون چی میتونه باشه؟ فعل این روابط ربطی به اسم مدل هاشون نداره که فرضا بگیم یک video میتونه تعدادی تگ داشته باشه پس بیام اسم متودشو tags بزاریم.
اما نام متدی که تعداد بازدید ویدیو رو برامون میاره و بقیه متودها چی میتونه باشه؟؟


ثبت پرسش جدید
Saman
تخصص : برنامه نویس وب
@samanzdev 3 سال پیش مطرح شد
0

سلام
ببخشید من متوجه نشدم، میشه واضع تر توصیح بدید.
تا سریعتر مشکلتون رفع بشه.
@hosseinshirinegad98


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

سلام.
برای بازدید ویدئوها به نظرم نیاز به جدول اضافه نیست و شما داخل همون جدول videos میتونید یه فیلد به صورت زیر تعریف کنید.

$table->integer('viewCount)->default(0);

پس جداول شما میشه 3 تا: users - videos - bookmark_videos
حالا داخل مدل User باید به این صورت نام گذاری کنید.

public function bookmarks() {
    return $this->belongsToMany(Videos::class, 'bookmarks');
}

مدل Video هم باید به صورت زیر باشه.

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

public function bookmarks() {
    return $this->belongsToMany(Videos::class, 'bookmarks');
}

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

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

id
fullname
mobile

جدول دوم هم برای نگهداری ویدیوها با نام videos هست که ادمین ویدیو آپلود مینماید و چند تا از فیلدهاش به ترتیب زیر هست

id
title
video_path
description

خوب الان من میخوام بازدیدهای یکتای هرکاربر رو با ip اون کاربر ذخیره کنم البته ثبت بازدید یکتا با ip خیلی هم درست نیست ولی فعلا روال کار به همین شکل است که با ip بازدیدهای یکتا محاسبه شود.
الان برای بازدید ویدیوها یه جدول میانه ایجاد کردم با نام views و ارتباط بین دو جدول بالا برای این جدول چند به چند است یعنی هر کاربر میتونه تعدادی ویدیو رو مشاهده کنه و در طرف دیگه هم هر ویدیو میتونه توسط چند کاربر دیده بشه.
فیلدهای این جدولو با موارد زیر پر کردم

user_id
video_id
user_ip

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

user_id
video_id

خب ما دو تا مدل داریم به نام های User و Video

class User extends Models {
    protected $fillable = ['fullname', 'mobile'];

    public function ??() {
        return $this->belongsToMany(Video::class, 'views');
    }

    public function ??() {
        return $this->belongsToMany(Video::class, 'favoriets');
    }

}

و

class Video extends Models {
    protected $fillable = ['title', 'video_path', 'description'];

    public function ??() {
        return $this->belongsToMany(User::class, 'views');
    }

    public function ??() {
        return $this->belongsToMany(User::class, 'favoriets');
    }

}

خوب دوستان حرفم این بود اسم این ریلیشن ها رو چی میتونم بزارم که با معنی هم باشه؟
@rezajahangir
@samanzdev


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

این روابطی که تعریف کردین اشتباه هست من در پیام قبلی واستون نحوه نام گذاری رو توضیح دادم.
اگر نا مفهموم است بگین تا مجدد بگم


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

عزیزم جداول من چهارتاست و من برای هر جدولم باید دوتا ریلیشن در دو مدل تعریف کنم که مجموعا میشه 4 ریلیشن.
این کجاش اشتباست.
در ابتدا گفتین شما سه تا جدول دارید و جوابتونو بر اساس اون سه تا جدول عرض کردین ولی من 4 تا جدول دارم.
برای بازدیدها من نیاز دارم تعداد بازدید یونیک رو داشته باشم پس اینم نیاز به جدول داره که میشه دو تا رابطه چند به چند ساده.
من از فیلد view_count نمیخوام استفاده کنم پس چطور کاربرانو شناسایی کنم تا بازدید مجددشونو محدود کنم.
پس میشه 4 تا جدول.
اگاه از فیلد view_count استفاده کنم با رفرش مجدد تعداد بازدید مرتب افزایش پیدا میکنه و این مد نظرم نیست؟
حالا اگه جوابی دارید بفرمایید.
@rezajahangir


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0
class User extends Models {
    protected $fillable = ['fullname', 'mobile'];

    public function videoViews() {
        return $this->belongsToMany(Video::class, 'views');
    }

    public function videoFavoriets() {
        return $this->belongsToMany(Video::class, 'favoriets');
    }

}
class Video extends Models {
    protected $fillable = ['title', 'video_path', 'description'];

    public function userViews() {
        return $this->belongsToMany(User::class, 'views');
    }

    public function userFavoriets() {
        return $this->belongsToMany(User::class, 'favoriets');
    }

}

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

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