Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用外键从现有表中创建slug_Php_Mysql_Laravel - Fatal编程技术网

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
。如何将slug
Pro-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多万行。