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

کمک برای group by relationship در لاراول

سلام
من 3 تا مدل دارم که میخوام کاربرا را group by بگیرم
مدل user
مدل book
مدل writer

قضیه اینه که هر مدل book میتونه بی نهایت writer داشته باشه و هر کاربر هم میتونه بی نهایت write برای هر book بزنه و توی writer با ستون userid به users متصل میشه
حالا میخوام توی صفحه سینگل هر book مثلا اگر کاربر علی 20 باز write زده بود اسمش فقط یکبار نشون داده بشه
و مورد بعدی اینکه این کاربرها را بر اساس مثلا ستون rate در مدل writer ترتیب نمایش بدم
لطفا راهنمایی کنین
سپاس

class writer extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
    public function book()
    {
        return $this->belongsTo(Book::class);
    }
}
class book extends Model
{

    use HasFactory;

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

    public function writer()
    {
        return $this->hasMany(writer::class);
    }
}

ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش مطرح شد
0

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

و نتیجه شما این شکلی هست در حال حاضر
توضیح تصویر رو وارد کنید
توضیح تصویر رو وارد کنید

شما کافیه توی حلقه تون اون writers رو براساس فیلدمورد نظرتون فیلتر کنی مثلا user_id و اینکار توی blade با متد unique انجام میشه

   <div class="container mt-3">
        <h5>BookName: <span class="text-primary">{{ $book->name }}</span></h5>

        <hr>

        <h5>Writers Name:</h5>
        <ul class="text-danger">
        @foreach($book->writers->unique('user_id') as $w)
            <li>{{ $w->user->fullname }}</li>
        @endforeach
        </ul>
    </div>

توضیح تصویر رو وارد کنید

و در آخر نتیجه نهایی شما
توضیح تصویر رو وارد کنید

مدل book

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    use HasFactory;

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

    public function writers()
    {
        return $this->hasMany(Writer::class);
    }
}

و مدل Writer

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Writer extends Model
{
    use HasFactory;

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

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

روش های دیگه ی هم هست که توی همون ریلیشن ها در مدل تون میتونی پیاده کنی


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

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