我有两个表格-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
即可。