بسیاری از روابط در لاراول به خوبی کار می کنند – شما می توانید رکوردها را به راحتی ضمیمه ، جدا یا همگام سازی کنید. اما اگر می خواهید سوابق محوری را توسط جدیدترین یا قدیمی ترین سفارش دهید؟ این مقاله به شما نشان می دهد چگونه.

در اینجا نحوه توصیف جدول محوری پیش فرض آورده شده است.

پرونده مهاجرت:

class CreateProjectUserPivotTable extends Migration
{
    public function up()
    {
        Schema::create('project_user', function (Blueprint $table) {
            $table->unsignedInteger('project_id');
            $table->foreign('project_id')->references('id')->on('projects');
            $table->unsignedInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
        });
    }
}

و سپس در مدل ، به عنوان مثال ، برنامه / Project.php:

public function users()
{
    return $this->belongsToMany(User::class);
}

بنابراین ، چگونه می توانیم زمینه های افزایش خودکار یا مهر زمان را اضافه کنیم و سپس بتوانیم جدیدترین یا قدیمی ترین سوابق محوری را سفارش دهیم؟ خیلی ساده.

در مهاجرت ، اضافه می کنیم bigIncrements و مهر زمان زمینه های:

Schema::create('project_user', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedInteger('project_id');
    $table->foreign('project_id')->references('id')->on('projects');
    $table->unsignedInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users');
    $table->timestamps();
});

در مدل ، ما نیازی به افزودن چیز خاصی در مورد نداریم شناسه زمینه ، اما برای مهر تایم یک روش خاص وجود دارد withTimestamps ():

public function users()
{
    return $this->belongsToMany(User::class)->withTimestamps();
}

و سپس ، می توانیم یک رابطه جداگانه ایجاد کنیم ، چیزی مانند این:

public function newest_users()
{
    return $this->belongsToMany(User::class)->orderBy('id', 'desc');
}

در Controller برای لیست پروژه ، ممکن است این موارد را داشته باشیم:

$projects = Project::with('newest_users')->get();

و سپس ، اگر می خواهید کاربران پروژه را از جدیدترین ها مشاهده کنید ، این است:

@foreach($project->newest_users as $user)
    <span class="label">{{ $user->name }}</span>
@endforeach

صادقانه بگویم ، هنگام نوشتن این مقاله ، متوجه شدم که مهر زمان قسمتها بیشتر فقط برای اطلاع هستند ، سفارش آنها قابل اعتماد نیست ، زیرا یک فرصت بزرگ برای همگام سازی در همان ثانیه وجود دارد. بنابراین توصیه من این است که سفارش دهید شناسه فیلد ، که بصورت خودکار افزایش می یابد ، و فقط در صورت تمایل به زمان سنجی نشانگرهای زمان را بررسی کنید.

اطلاعات بیشتر در این مقاله: جداول محوری و روابط بسیاری با بسیاری