簡體   English   中英

Laravel Eloquent 根據關系增加一列

[英]Laravel Eloquent increment a column based on a relation

我目前有一個與另一個模型相關聯的圖像鏈接表,如下所示

+----+-------------+----------------+
| id | property_id |      url       |
+----+-------------+----------------+
|  1 |           2 | /example.jpg   |
|  2 |           7 | /example-2.jpg |
|  3 |           5 | /example-3.jpg |
+----+-------------+----------------+

我想在表格中添加一列來對圖像進行排序,如下所示

+----+-------------+----------------+------------+
| id | property_id |      url       | sort_order |
+----+-------------+----------------+------------+
|  1 |           2 | /example.jpg   |          1 |
|  2 |           7 | /example-2.jpg |          1 |
|  3 |           2 | /example-3.jpg |          2 |
+----+-------------+----------------+------------+

有沒有辦法使 sort_order 值 auto_increments 但依賴於 property_id 值的數據庫級約束(即把它放在遷移中),這樣 sort_order 值本質上是一個索引,每個 property_id 都有自己的索引?

<table_name>應替換為您的表名。

關鍵在這一行

\\DB::unprepared('CREATE TRIGGER <table_name>_sort_order BEFORE INSERT ON <table_name> FOR EACH ROW SET NEW.sort_order = (SELECT IFNULL(MAX(sort_order), 0) FROM <table_name> WHERE property_id = NEW.property_id) + 1;');

<?php

use Illuminate\Database\Migrations\Migration;

class AddSortOrderTo<table_name_camelized> extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table(<table_name>, function(Blueprint $table) {
            $table->unsignedInteger('sort_order')->default(0);
        });

        \DB::unprepared('CREATE TRIGGER <table_name>_sort_order BEFORE INSERT ON <table_name> FOR EACH ROW SET NEW.sort_order = (SELECT IFNULL(MAX(sort_order), 0) FROM <table_name> WHERE property_id = NEW.property_id) + 1;');
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        \DB::statement('DROP TRIGGER <table_name>_sort_order');
        
        Schema::table(<table_name>, function (Blueprint $table) {
            $table->dropColumn('sort_order');
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM