#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, который я использую для нескольких вставок, но он вставляется только один раз