راکت

جایگزین شخصی به جای روابط در لاراول

4 پاسخ

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

اومدم به طور مثال خودم روابط چند به چند رو با اضافه کردن تیبلی به صورت مثلا

article_offer

خودم هندلش کردم.

اشکالی ایجاد نمیشه به جای استفاه از روابط لاراول خودمون دستی هندلش کنیم؟

مجتبی
مجتبی
@mojtaba.kh
ثبت پرسش جدید

پاسخ‌ها

4
نوب
نوب
@yk5742g

تخصص: کدنویس نوب :)

سلام
از توابع لاراول استفاده کنین حتما که خوانایی کد بالا بره و تعداد خطوط کدنویسی کم بشه

روابط در لاراول بسیار راحته
یه مثال میزنم برات

فرضا یه جدول users داری و یه جدول userprofiles

خب 2 تا مدل داری به اسم user و userprofile

حالا چون هر کاربر میتونه یک پروفایل داشته باشه به صورت زیر باید متدها را در مدلها استفاده کنی

مدل user

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
    public function userProfile(){
       return $this->hasOne(user_profile::class);
    }
}

توی کد بالا در متد userprofile نوشتم که به هر کاربر یک پروفایل دارد (با کلمه hasOne)
و توی ورودیش نام مدل userprofile را صدا زدم

حالا مدل userprofile اینطوری میشه

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class user_profile extends Model
{
    public $timestamps = false;

    protected $fillable = ['user_id'];

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

خب اینجا اومدم و یه متد ساختم به اسم user و داخلش گفتم با کلمه کلیدی belongsTo یعنی این متعلق به مدل user هست

حالا اینجوری مقادیر جدول userprofile را صدا میزنم

auth()->user()->userProfile
مجتبی
مجتبی
@mojtaba.kh

تخصص: توسعه وب

@yk5742g
مرسی از مثال و توضیحات

اگر مشکل خوانایی و زیاد شدن خط کد ها رو بزاریم کنار ، در پروژه مشکلی ایجاد نمیشه به این صورت و بدون روابط پیشفرض انجام بدیم؟

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

نوب
نوب
@yk5742g

تخصص: کدنویس نوب :)

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

مجتبی
مجتبی
@mojtaba.kh

تخصص: توسعه وب

@yk5742g
نه یک مورد رو تست کردم اوکیه :)

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

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