php - Laravel Migration - 创建一个从现有列填充的新列

标签 php mysql database laravel migration

我正在尝试创建一个迁移,以创建一个新列并用现有列中的数据填充它。

我想将名称列变成一个 slug(使用辅助函数)并将其保存在一个 slug 列中。

我已经试过了,但没有成功:

public function up()
{
    Schema::table('teams', function(Blueprint $table)
    {
        //
        $table->string('slug', 100);
    });

    $teams = DB::table('teams')->get();

    foreach ($teams as $team)
    {
        $team->slug = str_slug($team->name, "-");
        $team->save();
    }
}

我是白痴吗?我可以做这个吗?

谢谢

最佳答案

假设您有一个 Team 模型:

$teams = App\Team::all();

foreach($teams as $team) {
    $team->slug =  str_slug($team->name, "-");
    $team->save();
}

您正在尝试在实际使用查询生成器的代码中使用 Eloquent ORM 语法 ($team->save)。您最好选择其中之一(ORM 或查询构建)。我的版本使用 Eloquent ORM。当然,您可以一直使用 Query Builder 语法,如下所示:

$teams = DB::table('teams');
foreach($teams as $team) {
    DB::table('teams')
            ->where('id', $team->id)
            ->update(['slug' => str_slug($team->name)]);
}

基本上,查询生成器选择命令(如 $teams = DB::table('teams');)将返回一个 stdClass 对象数组(没有“保存”方法) ,而 Eloquent ORM select 将返回指定模型的对象集合,这些对象确实具有“保存”方法。

关于php - Laravel Migration - 创建一个从现有列填充的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32819364/

相关文章:

django - 在本地为 Django 使用 SQLite,在服务器上使用 Postgres

javascript - CKEDITOR 在第一次提交时不通过 ajax 提交数据

php - 如何使用 pdo 发送数组以在 smarty 3.1.21 的 html_options 中使用它

php - HWIOAuthBundle - Windows 上的 SSL 证书

PHP 获取 00 :00:00 of a unix timestamp

sql - 在某个字符 SQL 之后动态提取字符串

php - 从 Dropzone 中删除任何现有文件显示 dictDefaultMessage

php - 返回 nodays 利息为空

mysql - 我尝试在 mysql 'CASE WHEN' 条件下使用 IN

database - WiX:数据库卸载