Как создать собственное автоинкремент для строкового поля в laravel - PullRequest
1 голос
/ 30 января 2020

Мне нужно сохранить пользовательскую строку автоинкремента при создании нового продукта. Каков наилучший способ добиться этого в laravel

это результат, который я хочу

   id     sku        product_name
    1     'sku-001'    milk
    2     'sku-002'    cerelac
    2     'sku-003'    milo

это мой текущий код

    Schema::create('products', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('sku');
        $table->string('name')->unique();

    });

Ответы [ 3 ]

2 голосов
/ 30 января 2020

Вы также можете использовать модельные события. Ниже у вас есть функция загрузки, в которую вы бы поместили свою модель. После этого у вас будет доступ к различным событиям, таким как создание, создание, обновление, обновление и т. Д. И т. Д. Нас интересует созданное, так как оно срабатывает после сохранения вашей модели.

Метод stati c получает функцию, имеющую в качестве параметра экземпляр только что сохраненной модели, чтобы вы могли получить доступ к идентификатору и объединить его с нужной строкой.

/**
 * Enables us to hook into model event's
 *
 * @return void 
 */
public static function boot()
{
    parent::boot();

    static::created(function($product) {
        $product->sku .= 'sku-' . $product->id;
        $product->save();
    });
}
0 голосов
/ 30 января 2020

Попробуйте этот метод:

$latestorder = Order::where('status','processing')->latest('created_at')->first();

if($latestorder->exists()) {
    $total = $latestorder->total_count+1;
} else {
    $total = 1;
}

$order->status = 'processing';
$order->total_count = $total;
0 голосов
/ 30 января 2020

Да, конечно, но вы должны создать его самостоятельно. как этот

$id = "sku-000";
echo ++$id; // sku-001
echo "<br>";
echo ++$id; // sku-002

Помните, что вы должны сначала получить последний вставленный Id и получить sku этого, а затем выполнить процесс приращения. как этот

$last_id = Product::orderBy('sku', 'desc')->first()->sku;
$last_id = $last_id++;

Product::create(['sku' => $last_id, 'name' => 'test product']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...