Php 使用外键从现有表中创建slug
我有两个表-通过外键连接的活动和产品(Php 使用外键从现有表中创建slug,php,mysql,laravel,Php,Mysql,Laravel,我有两个表-通过外键连接的活动和产品(product\u id) 战役 | id | |产品| id | | slug | 产品 | id | |产品|名称| 如何在Products表的slug列中生成slug 例如,带有product_name=“Pro Evolution Soccer 2017”的产品具有id=1。如何将slugPro-evolution-soccer-2017-1生成到活动表中?也许我应该使用Laravel助手函数str_slug($title,$separator),但
product\u id
)
战役
| id | |产品| id | | slug |
产品
| id | |产品|名称|
如何在Products表的slug
列中生成slug
例如,带有product_name=“Pro Evolution Soccer 2017”
的产品具有id=1
。如何将slugPro-evolution-soccer-2017-1
生成到活动表中?也许我应该使用Laravel助手函数str_slug($title,$separator)代码>,但我不知道如何
顺便说一句,我有一个超过50万的产品,需要作为蛞蝓产生 您可以创建一个命令来执行此任务
并通过命令行运行一个循环来创建和保存所有这些slug
此外,此方法还可以在将来使用,或者安排它经常运行并填充新的空行。您可以创建一个命令来执行此任务
并通过命令行运行一个循环来创建和保存所有这些slug
此外,此方法还可以在将来使用,或者安排它经常运行并填充新的空行。您可能应该在创建和更新时将其保存在Products表中。如果您在一个单独的表中执行此操作,那么当Products.product_名称更改时,将会导致问题
$product->slug = str_slug($product->product_name, '-');
要更新现有项目,您可以创建一个迁移,将slug
字段添加到Product,然后选择所有产品,遍历它们,并像上面那样设置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');
});
}
}
您可能应该在创建和更新时将其保存在Products表中。如果您在一个单独的表中执行此操作,那么当Products.product_名称更改时,将会导致问题
$product->slug = str_slug($product->product_name, '-');
要更新现有项目,您可以创建一个迁移,将slug
字段添加到Product,然后选择所有产品,遍历它们,并像上面那样设置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');
});
}
}
为什么要将slug
存储在活动表中,而不是产品表中?如果最后一部分始终是产品id,为什么还要麻烦存储slug?你可以在运行中生成它,你可以从slug中得到产品。@Jerodev,那将是理想的。如何动态生成?为什么要将slug
存储在活动表中,而不是产品表中?如果最后一部分始终是产品id,为什么还要麻烦存储slug?你可以在运行中生成它,你可以从slug中得到产品。@Jerodev,那将是理想的。我如何在运行中生成它?我想你是对的。我应该在产品表中创建slug。。。但是,如果没有迁移,我怎么能做到这一点呢?您可能希望添加带有迁移的新列,这是一个合适的位置,原因有很多。为什么不想使用迁移呢?好的,我已经用迁移完成了,但是slug列是空的。我认为Product::all()
无法获取任何内容,因为我有50多万行。我想你是对的。我应该在产品表中创建slug。。。但是,如果没有迁移,我怎么能做到这一点呢?您可能希望添加带有迁移的新列,这是一个合适的位置,原因有很多。为什么不想使用迁移呢?好的,我已经用迁移完成了,但是slug列是空的。我认为Product::all()
不会获取任何内容,因为我有50多万行。