用雄辩的laravel将默认值设置为一行

时间:2018-07-18 12:25:21

标签: php laravel

我已经使用laravel和post and get方法创建了一个资源控制器:

class MyController extends Controller{
    //get method when page is visited
    public function index()
    {
        $data=array(
            'title'=>'Standard Stock',
            'standards'=>DB::table('standards')
            ->join('ps_product_lang','ps_product_lang.id_product','=','standards.id_product')
            ->select('standards.*','ps_product_lang.name')
            ->get()
        );
        return view('pages.standards')->with($data);
    }

    //post method to update value

     public function update(Request $request, $id)
   {

   $this->validate($request,[
        'quantity'=>'required'
    ]);
    $standard=Standard::find($id);
    $standard->quantity=$request->input('quantity');
    $standard->save();
    return redirect('/standards')->with('success','Quantity Updated');
    }
}

现在它可以正常工作,但是问题是我的ps_product_lang数据库中有2000个产品,我想将每个$standard->quantity都设置为15。 我曾经通过控制器中的update()函数来更新数量值。

但是现在我想将所有$standard->quantity的初始值设置为15,我绝对不会单击2000时间表单按钮来提交发布请求。

我的问题是:是否有任何简便的方法将所有$standard->quantity值设置为15?不接触其他代码?

2 个答案:

答案 0 :(得分:2)

有几种选择。

1)SQL更新

您可以使用SQL查询更新数据库,并将所有行设置为数量= 15

UPDATE ps_product_lang SET quantity = 15

2)Laravel Jobs

您可以为此创建工作。

请参见文档此处:https://laravel.com/docs/5.6/queues#creating-jobs

3)迁移

您可以为此使用迁移,并为此列设置默认值。

Schema::table('ps_product_lang ', function (Blueprint $table) {
            $table->string('quantity')->default('15')->change();
        });

在文档上查看迁移详细信息:https://laravel.com/docs/5.6/migrations#modifying-columns

答案 1 :(得分:1)

是的。您可以。您必须在“数据库/迁移”文件夹中编辑create_table_file。

因此,只需将列的默认值设置为“ 15”即可。

例如:

Schema::create('platforms', function (Blueprint $table) {
            $table->increments('platform_id');
            $table->string('quantity')->default(15);
            $table->string('price')->default('');
            $table->timestamps();
        });

完成后,您必须回滚表。

这将删除您的所有数据,因此请先备份表。

php artisan migrate:rollback
php artisan migrate