سلام وقت بخیر
من سه تا جدول به این صورت دارم
user
shift
location
میخوام یک جدول میانی داشته باشم که id این سه تا جدول + یک ستون دیگه به نام روز را نگهداری کنه.
یعنی یک کاربر در تاریخ فلان در شیفت صبح در بخش A مشغول به کاره
این جدول میانی منه
Schema::create('shift_user', function(Blueprint $table) {
$table->id();
$table->bigInteger('location_id')->unsigned();
$table->bigInteger('shift_id')->unsigned();
$table->bigInteger('user_id')->unsigned();
$table->date('day');
$table->unique(['location_id', 'shift_id', 'user_id', 'day']);
});
این هم مدل user
public function shift()
{
return $this->belongsToMany(Shift::class);
}
public function location()
{
return $this->belongsToMany(Location::class);
}
مدل location
public function user()
{
return $this->belongsToMany(User::class);
}
public function shift()
{
return $this->belongsToMany(Shift::class);
}
و مدل shift
public function user()
{
return $this->belongsToMany(User::class);
}
public function location()
{
return $this->belongsToMany(Location::class);
}
این هم دستوری هست که اطلاعات را وارد دیتابیس میکنم
$shift->user()->attach($userid, ['location_id' => $location, 'day' => $day]);
از طریق دستور attach تونستم اطلاعات را داخل دیتابیس insert کنم ولی موقع فراخوانی به مشکل خوردم و هر کاری میکنم یک اروری میده و نمیتونم متوجه بشم که چطوری میتونم اطلاعات را بخونم.
الان میخوام اولا بر اساس شیفتی که توی روز خاص داره اجازه لاگین بدم بهش که اگر کلا اون روز و توی اون شیفت چیزی براش تعریف نشده بود نتونه وارد بشه که با middleware به راحتی میشه این رو انجام داد (البته زمانی که بفهمم چطوری میتونم اطلاعات را فراخوانی کنم 😁)
دوما اگر وارد شد میخوام براش نمایش بدم که شما امروز به این بخش ها دسترسی داری
وقتی این را فراخوانی میکنم با توجه به تعریف نام جدول اطلاعات را نمایش میده
$shifts = $user->shift()->get();
ولی وقتی این رو میزنم
$locations = $user->location()->get();
این ارور میده
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'lar_trakpak.location_user' doesn't exist (SQL: select `locations`.*, `location_user`.`user_id` as `pivot_user_id`, `location_user`.`location_id` as `pivot_location_id` from `locations` inner join `location_user` on `locations`.`id` = `location_user`.`location_id` where `location_user`.`user_id` = 1)
این رو هم چک کردم
$locations = $user->shift()->location()->get();
ولی این ارور را دریافت کردم
Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::location()
لطفا بنده را راهنمایی بفرمائید
با تشکر
@amin.webdesign
میدونم این را داره میگه! راه حلش چیه؟
نمیخوام یک جدول دیگه درست کنم! چطوری میتونم از این جدول اطلاعات را بگیرم؟
سلام
شما اول باید با روابط لاراول کامل آشنا باشید تا بتونید مشکلتون رو حل کنید. یه لینک بهت میدم اونجا ماهیگیری رو یاد بگیر
دیتی - آموزش روابط لاراول
@amin.webdesign
خیلی ممنون از راهنماییت ولی فکر کنم اصلا شما متوجه مشکل من نشدید (شاید هم من متوجه نمیشم شما چی میگی 🧐).
من مشکلم با ساخت جدول میانی نیست و ساختار جدول من شامل هیچکدام از موارد روتین رابطهها نمیشه. مشکلم با جدول میانی برای سه جدوله که تمامی حالات براش امکان پذیره. من کلا راهی نتونستم پیدا کنم که با eloquent اینکار را انجام بدم و میخواستم بدونم راهی هست یا اینکه باید حتما از query builder استفاده کنم؟
سلام وقت بخیر به این لینک سر بزنید:
https://medium.com/@kaism/3-way-pivot-table-in-laravel-d42d60462b06
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟