2017-05-04 51 views
0

使用laravel雄辯來選擇特定的字段值。然而,我發現自己處理這個錯誤部門標識使用laravel雄辯從表中選擇數據

SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '[{"id":1}]' for column 'department_id' at row 1 (SQL: insert into `opportunities` (`category`, `opportunity`, `vacancies`, `department_id`, `updated_at`, `created_at`) values (Attachement, Assistant, 2, [{"id":1}], 2017-05-04 02:12:04, 2017-05-04 02:12:04))

字段的值應該是int,它是從另一個表繪製如下

public function store(Request $request) 
{ 
    // return $request->all(); 

     $this->validate($request,[ 
     'department'=>'required', 
     'category'=>'required', 
     'description'=>'required|string', 
     'positions'=>'required|integer', 
     ]); 
    //dd($request); table('departments')->where('dep_name', '$dep') 
    $dep = $request->department; 
    $department=Department::all(); 
    //dd($department); 

    $department_id = Department::select('id')->where('dep_name','=', $dep)->get(); 

    // return $department_id; 

    $newOpportunity = Opportunity::create(
     [ 
      'category'=>$request->category, 
      'opportunity'=>$request->description, 
      'vacancies'=>$request->positions, 
      'department_id'=>$department_id, 
     ] 
     ); 
    $newOpportunity ->save(); 

    return redirect('admin/'); 
} 
+0

改變這一行'department_id'=> $ department_id [0] - > id, – JYoThI

回答

0

你的傳球達陣的值derpartment_id列。 Id爲你需要訪問它像這樣

'department_id'=>$department_id[0]->id, 
0

聲明

Department::select('id')->where('dep_name','=', $dep)->get(); 

返回Collection的數組中。

您需要單個記錄的id。試試這個

$department = Department::where('dep_name','=', $dep)->first(); 

if($department != null) { 
    $newOpportunity = Opportunity::create(
     [ 
      'category'=>$request->category, 
      'opportunity'=>$request->description, 
      'vacancies'=>$request->positions, 
      'department_id'=>$department->id, 
     ] 
    ); 
    $newOpportunity ->save(); 
} 
0

我認爲你需要像更新代碼:

如果您需要id單記錄:

$department_id = Department::where('dep_name','=', $dep)->first(); 

$newOpportunity = Opportunity::create(
      [ 
       'category'=>$request->category, 
       'opportunity'=>$request->description, 
       'vacancies'=>$request->positions, 
       'department_id'=>$department_id->id, 
      ] 
     ); 

,或者您需要id的那麼多記錄:

$department_id = Department::select('id')->where('dep_name','=', $dep)->get(); 

foreach($department_id as $department_ids){ 

    $newOpportunity = Opportunity::create(
      [ 
       'category'=>$request->category, 
       'opportunity'=>$request->description, 
       'vacancies'=>$request->positions, 
       'department_id'=>$department_ids->id, 
      ] 
     ); 
} 

希望這可以幫助你。

0

你真的不需要收集。您需要具有一個屬性的單個記錄 - id。您的代碼很髒。嘗試避免檢索未使用的數據是這樣的:下面$department=Department::all();

代碼從數據庫ONLY ONE記錄檢索,這是正確的做法:

$department = Department::select('id')->where('dep_name','=', $request->department)->first(); 

全碼:

public function store(Request $request) 
{ 
    $this->validate($request,[ 
     'department' => 'required', 
     'category' => 'required', 
     'description' => 'required|string', 
     'positions' => 'required|integer' 
    ]); 

    $department = Department::select('id')->where('dep_name','=', $request->department)->first(); 
    if($department) { 
     $newOpportunity = Opportunity::create([ 
      'category' => $request->category, 
      'opportunity' => $request->description, 
      'vacancies' => $request->positions, 
      'department_id' => $department->id, 
     ]); 
     $newOpportunity->save(); 
    } 

    return redirect('admin/'); 
}