我有两个表格-Campaigns和Products通过外键(product_id)连接

战役

|id| |product_id| |slug|

产品展示

|id| |product_name|

如何在“产品”表的slug列中生成块。

例如,带有product_name = "Pro Evolution Soccer 2017"的产品具有id = 1。如何将子弹Pro-evolution-soccer-2017-1生成到Campaigns表中?可能我应该使用Laravel辅助函数str_slug($title, $separator);,但是我不知道如何...

顺便说一句,我有超过50万种产品需要以段塞的形式生成...

最佳答案

您可能应该在创建和更新时将其保存在“产品”表中。如果您一次执行此操作,则在单独的表中,如果/当Products.product_name更改时,它将引起问题。

$product->slug = str_slug($product->product_name, '-');


要更新现有项目,您可以创建一个迁移,以将slug字段添加到“产品”,然后选择所有产品,遍历它们,然后像​​我上面那样设置段塞值。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use App\Models\Product;

class CreateFlightsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('Products', function (Blueprint $table) {
            $table->string('slug');
        });

        foreach (Product::all() as $product) {
            $product->slug = str_slug($product->product_name, '-');
            $product->save();
        }
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('Products', function (Blueprint $table) {
            $table->dropColumn('slug');
        });
    }
}


然后从命令行输入php artisan migrate即可。

10-04 13:35
查看更多