2017-05-17 93 views
0

我有表名爲companies和其他表名爲ads,我嘗試在廣告列中獲取公司ID爲company_idLaravel外鍵保存問題

這是我的廣告遷移:

<?php 

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateAdTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('ads', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('company_id')->unsigned(); 
      $table->string('title')->unique(); 
      $table->string('slug')->unique(); 
      $table->string('image')->nullable(); 
      $table->string('description'); 
      $table->timestamps(); 
     }); 

     Schema::table('ads', function($table) { 
      $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade'); 
     }); 
    } 

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

這將創造我的廣告表沒有問題,但是當我嘗試保存廣告返回我這個錯誤:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`jobid`.`ads`, CONSTRAINT `ads_company_id_foreign` FOREIGN KEY (`company_id`) REFERENCES `companies` (`id`)) (SQL: insert into `ads` (`title`, `slug`, `description`, `image`, `updated_at`, `created_at`) values (first ad test, first-ad-test, <p>rwv R4QF Q4R</p>, 1494998776.png, 2017-05-17 12:26:17, 2017-05-17 12:26:17)) 

如何解決那?

UPDATE

public function up() 
    { 
     Schema::create('companies', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('company_name'); 
      $table->string('manager_name'); 
      $table->string('username')->unique(); 
      $table->string('email')->unique(); 
      $table->string('image')->nullable(); 
      $table->string('password'); 
      $table->text('about')->nullable(); 
      $table->rememberToken(); 
      $table->timestamps(); 
     }); 
    } 

存儲功能

public function store(Request $request) 
    { 
    $this->validate($request, array(
     'title' => 'required|max:255', 
     'slug' => 'required|alpha_dash|min:5|max:255|unique:ads,slug', 
     'image' => 'sometimes|image', 
     'description' => 'required' 
    )); 

    $ad = new Ad; 

    $ad->title = $request->input('title'); 
    $ad->slug = $request->input('slug'); 
    $ad->description = $request->input('description'); 


    if ($request->hasFile('image')) { 
     $avatar = $request->file('image'); 
     $filename = time() . '.' . $avatar->getClientOriginalExtension(); 
     $location = public_path('ads/'); 
     $request->file('image')->move($location, $filename); 


     $ad->image = $filename; 
    } 

    $ad->save(); 


     Session::flash('success', 'Your ad published successfully!'); 

     return redirect()->route('company.adslist', $ad->id); 
    } 
+0

發佈您的公司架構 –

+0

@SapneshNaik已經 – djhru

+0

您必須確保發送'company_id'到表中。你會傳遞除'company_id'之外的所有內容。 (首標廣告測試,首測廣告測試,

rwv R4QF Q4R

,1494998776.png,2017-05-17 12:26:17,2017-05-17 12:26:17))** _ – Priya

回答

1
in your company form 
<input type="hidden" name="company_id" value ="{{ company_id }}"> 

然後在存儲方法

$ad->company_id=Input::get('company_id'); 

可以使ID動態根據用戶輸入,我只是硬編碼目前

+0

,以便您說如果我在遷移中更改標題和company_id將會修復? – djhru

+0

不,bro理解問題,當您試圖保存時,公司id在查詢中沒有得到通過,可以發佈錯誤來自哪裏的代碼 – Exprator

+0

我應該在哪裏傳遞它?在我的adcontroller? – djhru