在提交按钮上更新表字段

时间:2016-04-30 06:41:18

标签: php laravel controller sql-update laravel-4.2

我对laravel框架非常陌生。 我有一个表单,我需要在提交按钮单击时更新。 当提交按钮时,点击控制转到controller.php的update()函数。 但我无法编辑任何字段的值。

这是我的代码。

<!-- language: lang-bash -->

# domain: admin.abc.com
# public: /var/www/admin.abc.com/public_html/

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin admin@abc.com
  ServerName  admin.abc.com
  ServerAlias admin.abc.com

  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html index.php
  DocumentRoot /var/www/admin.abc.com/public_html
  # Log file locations
  LogLevel warn
  ErrorLog  /var/www/admin.abc.com/log/error.log
  CustomLog /var/www/admin.abc.com/log/access.log combined
</VirtualHost>

我也无法理解,这条线路发生了什么?因为我在代码中的任何地方都找不到验证功能。

    public function update($id)
    {
        //echo "<pre>";print_r(Input::all());exit;

        $product    = $this->product->find($id);

        $input      = Input::only('designer', 'sku', 'name', 'display_name', 'description', 'price', 'main_category', 'sub_category', 'lead_time', 'sizing', 'woven', 'body_fabric', 'lining_fabric', 'fit', 'primary_color', 'secondary_color', 'care_label', 'neck_type', 'closure', 'trims', 'special_finishings', 'image1', 'image2', 'image3', 'image4', 'image5','top', 'combo_products', 'keywords', 'visibility', 'featured');
        //echo "<pre>";print_r($input);exit;

        try
        {
            $this->adminNewProductForm->validate($input);


        } catch(\Laracasts\Validation\FormValidationException $e)
        {
            return Redirect::back()->withInput()->withErrors($e->getErrors());


        }

        $slug       = Str::slug(Input::get('name'));

        $slug       = $this->product->getSlug($slug);

        $input      = array_add($input, 'slug', $slug);


        DB::transaction(function() use($product, $input)
        {

            $product->fill($input)->save();

            $stock_count    = 0;

            if(!empty(Input::get('xsmall_size')))
            {
                $rows = DB::table('products_variants')->where('product_id', $product->id)->where('variant_name', 'XS')->get();

                $stock_count += Input::get('xsmall_stock');

                if(!empty($rows))
                {
                    DB::table('products_variants')->where('product_id', $product->id)->where('variant_name', 'XS')->update(array('variant_specs' => Input::get('xsmall_size'), 'price_change' => Input::get('xsmall_price'), 'total_stock' => Input::get('xsmall_stock'), 'stock_used' => 0));


                } else {

                    DB::table('products_variants')->insert(array('product_id' => $product->id, 'variant_name' => 'XS', 'variant_specs' => Input::get('xsmall_size'), 'price_change' => Input::get('xsmall_price'), 'total_stock' => Input::get('xsmall_stock'), 'stock_used' => 0));

                }

            }

$input = array();

            $input['flagship_status'] = Input::get('flagship_status');

            if(Input::get('flagship_status'))
            {

                $input['stock_count'] = Input::get('small_stock');

            }else {

                $input['stock_count'] = $stock_count;
            }

            $product->fill($input)->save();

        });

        //echo "<pre>";print_r(Input::all());exit;

        return Redirect::back()->withFlashMessage('Product Updated Successfully!');

    }

我需要更新表产品而非 products_variants

1 个答案:

答案 0 :(得分:0)

validate继承自FormRequst类。

https://laravel.com/api/5.0/Illuminate/Foundation/Http/FormRequest.html#method_validate

您提供的代码太多,信息太少。您说您需要更新特定的表,但是有两行您非常有意地手动更新数据库条目。

这是其中之一:

DB::table('products_variants')->where('product_id', $product->id)->where('variant_name', 'XS')->update(array('variant_specs' => Input::get('xsmall_size'), 'price_change' => Input::get('xsmall_price'), 'total_stock' => Input::get('xsmall_stock'), 'stock_used' => 0));

当你这样称呼时:

$product->fill($input)->save();

它还可以保存属于它的“脏”(修改)模型,其中可以包含products_variants个关系。从它的声音来看,你是通过SQL直接错误地应用更改,然后模型的保存方法覆盖它。

您似乎不清楚您的代码实际上在做什么,我强烈建议将其简化并添加代码,因为您开始了解每行的功能。我认为你的问题是复制示例和添加自己的工作的副产品,而不了解Laravel如何处理关系和模型。几乎没有充分的理由使用原始SQL或DB语句。