نحوه‌ی ایجاد رابطه‌ی یک به یک بین دو جدول در لاراول
احسان

نویسنده

  • 1400/3/11
  • 0
  • 46
3 سال پیش| برنامه‌نویسی وب

نحوه‌ی ایجاد رابطه‌ی یک به یک بین دو جدول در لاراول

نحوه‌ی ایجاد رابطه‌ی یک به یک بین دو جدول در لاراول

برای ایجاد رابطه‌ی یک به یک (One to One) بین دو جدول در لاراول و بازیابی اطلاعات از آن‌ها سناریویی به صورت زیر داریم:

دو جدول به نام‌های users و profiles که هر کاربر می‌تواند یک پروفایل داشته باشد و هر پروفایل هم می‌تواند متعلق به یک دسته باشد.

پس با فرض اینکه migration و ارتباط بین جداول را به درستی ایجاد کرده‌ایم، در دو مدل خود ارتباطات را به صورت زیر پیاده‌سازی می‌کنیم:

User

public function profile()
{
	return $this->hasOne('App\Profile');
}

 

Profile

public function user()
{
	return $this->belongsTo('App\User');
}

حالا فرض می‌کنم قصد دارم در یکی از کنترلرهای خود اطلاعاتی کاربرانی که role آن‌ها برابر با student است را گرفته و اطلاعات مربوط به آن‌ها را در هر دو جدول بازیابی کنم و به صورت 30تایی paginate کنم و بر اساس id نیز مرتب‌سازی دلخواه را انجام دهم:

public function index()
{
	$users = User::where('role', 'student')
		->orderBy('id', 'asc')->paginate(30);

	return view('index', compact('users'));
}

در بخش view هم می‌توان به صورت زیر عمل کرد:

نکته‌ی مهم و پایانی: شاید قصد داشته باشیم روی هر دو جدول خود که با هم رابطه‌ی یک به یک دارند کوئری بزنیم و نتایج را بازیابی کنیم. نحوه‌ی کار به صورت زیر است و من در کنترلر کوئری‌های خود را روی جدول‌های خود با یک anonymous function ایجاد کرده در نهایت نتیجه را به view پاس داده‌ام و آنجا نیز نتایج دلخواه خود را نمایش می‌دهم. پس کدهای قبلی خود را می‌توانم به شکل زیر بازنویسی کنم:

کنترلر:

public function index()
{
	$profile = Profile::with(['user' => function ($query) {
		$query->where('role', 'student');
	}])->where('step_one', 'completed')
		->where('step_one_approved_by_admin', '!=', 'approved')
		->orderBy('id', 'asc')
		->paginate(30);

	return view('index', compact('users'));
}

نحوه کار در قسمت view هم که قبلاً ذکر شد و کاملاً مشخص است.

لازم به ذکر است فرض من در این سناریو بر این بوده که تمام نام‌گذاری‌ها در جداول طبق استانداردهای لاراول صورت گرفته و در غیر این صورت باید در مدل‌های خود، پارامترهای دیگری را نیز set کرد.

 

به‌روز رسانی: 1403/8/2
توی وبسایتم سعی می‌کنم محتوایی که تصور کنم ارزشمنده و به بقیه کمکی می‌کنه رو منتشر کنم. امیدوارم از مطالب وبسایت بتونید استفاده کنید و به کارتون بیاد. در ضمن اگه پروژه‌ی تحت وبی دارید که نیاز به برنامه‌نویسی و اجرا داره، می‌تونید با شماره انتهای صفحه با من تماس بگیرید تا در موردش با هم صحبت کنیم.
برچسب‌ها:


دیدگاه کاربران

ثبت دیدگاه

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی مشخص شده اند*