سلام
من 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);
}
}
سلام وقت بخیر
شما به فرض جداول زیر رو داری
و نتیجه شما این شکلی هست در حال حاضر
شما کافیه توی حلقه تون اون 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);
}
}
روش های دیگه ی هم هست که توی همون ریلیشن ها در مدل تون میتونی پیاده کنی
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟