Метод сохранения Laravel с неправильным именем таблицы

#php #laravel-4

#php #laravel-4

Вопрос:

Привет всем, я пытаюсь создать кампанию. В процессе кампании я назначу определенные продукты для этой кампании. Поэтому я должен вставить данные после создания post campaign в две таблицы, одна из которых есть campaigns , а другая есть campaignsproducts . Поэтому я создал две модели для каждой из них с одинаковыми именами.

Я пытаюсь вставить записи в обе таблицы при post action, используя метод сохранения. Я могу вставить в campaigns , но когда дело доходит до campaignsproducts этого, говорит campaigns_products , что таблица не существует.

В моей базе данных мое имя таблицы было CampaignsProducts . Пожалуйста, помогите, где я ошибаюсь. Пожалуйста, найдите мой код миграции, модели и действия post ниже.

 <?php

use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateCamapignproductsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('campaignproducts', function(Blueprint $table)
        {
            $table->increments('id');

            $table->integer('campaign_id')->unsigned();
            $table->integer('product_id')->unsigned();
            $table->decimal('product_sell_cost', 10, 2);

            $table->timestamps();
        });

        Schema::table('campaignproducts', function($table) {
            $table->foreign('campaign_id')->references('id')->on('campaigns');
            $table->foreign('product_id')->references('id')->on('products');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('campaignproducts');
    }

}
  

Модель CampaignProducts.php

 <?php

class CampaignProducts extends Eloquent {

    public function camapigns(){
        return $this->hasMany('Campaign');
    }

    public function products(){
        return $this->hasMany('Product');
    }
}
  

Опубликовать действие в контроллере

 public function postCampaign()
{
    //validation rules for create product 
    $rules = array(
        'campaign_name'         => 'required|min:2',
        'campaign_description'  => 'required|min:2',
        'campaign_startdate'    => 'required|date_format:"Y-m-d"',
        'campaign_enddate'      => 'required|date_format:"Y-m-d"',
        'campaign_urlname'      => 'required|between:4,20',
        'campaign_target'       => 'required|integer|min:1',
        'user_id'               => 'required|integer|min:1'
    );

    $validator = Validator::make(Input::all(), $rules);

    //procee the validation rules
    if($validator->fails()) {
        return Redirect::to('products/newcampaign')
            ->withErrors($validator)
            ->withInput();
    } else {
        echo "<pre>";
        print_r(Input::all());

        //store category data
        $campaign = new Campaign;
        $campaign->campaign_name            = Input::get('campaign_name');
        $campaign->campaign_description     = Input::get('campaign_description');
        $campaign->campaign_startdate       = Input::get('campaign_startdate');
        $campaign->campaign_enddate         = Input::get('campaign_enddate');
        $campaign->campaign_urlname         = Input::get('campaign_urlname');
        $campaign->campaign_target      = Input::get('campaign_target');
        $campaign->user_id              = Input::get('user_id');

        $campaign_id = $campaign->save();
        $campaign_products = Input::get('productid');

        $campaignproducts = new CampaignProducts;
        foreach($campaign_products as $key => $id)
        {
            $campaignproducts->product_id       = $key;
            $$campaignproducts->product_sell_cost = $id;
            $campaignproducts->campaign_id =    $campaign_id;
            $campaignproducts->save();  
        }       

        //redirect
        Session::flash('message', 'Successfully created campaign!');
        return Redirect::to('campaigns');
    }
}
  

Ответ №1:

Добавьте это в свою модель CampaignProducts:

 class CampaignProducts extends Eloquent {

    protected $table = 'campaignsproducts';

    ...
  

Или другой вариант — изменить имя таблицы при ее создании:

 Schema::create('campaign_products', function(Blueprint $table)
  

Комментарии:

1. я попробую изменить имя, но как получить идентификатор вставки после того, как я вставил с помощью метода сохранения

2. я могу вставить его, но вот еще одна проблема, если вы видите мой код, в конце есть цикл foreach, который я использую для нескольких вставок, но он вставляется только один раз