質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

6257閲覧

user_id 連携で登録できない

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/08/08 12:38

問題は、連携したuser_idが Integrity constraint violation: 1048 Column 'user_id' cannot be nullのエラーが出ます。

laravel5.4を使っています。

登録ボタンを押すと下記のエラーが出ます、どうすれば解決できますか?

(2/2) QueryException SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into `jobs` (`job_id`, `user_id`, `updated_at`, `created_at`) values (2121212, , 2017-08-08 21:32:21, 2017-08-08 21:32:21))

userテーブル:
id | name |

Jobテーブル:
id | user_id | job_id

説明:
user_idはuserテーブルとjobテーブルを連携する為です
job_idはuser毎に複数のJob_idを登録したいです、使いやすい為、jobテーブルに分離しました。

UserModel:

<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function jobs(){ return $this->hasMany('App\Job'); } }

jobModel:

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Job extends Model { protected $fillable = [ 'user_id', 'job_id' ]; public function user(){ return $this->belongsTo('App\User'); } }

jobscreateRequest:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class JobsCreateRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'user_id' =>'required', 'job_id' => 'required', ]; } }

JobController:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use App\Http\Requests\JobsCreateRequest; use Illuminate\Http\Request; use App\User; use App\Job; class UserJobsController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $users = User::latest()->get(); $query = Job::query(); $jobs = $query->orderBy('created_at','desc')->paginate(5); return view('admin.jobs.index', compact('jobs','users')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $users = User::pluck('name','user_id'); return view('admin.jobs.index',compact('users')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $user= Auth::user(); Job::create([ 'name' => request('name'), 'job_id' => request('job_id'), 'user_id' => auth()->id() ]); return redirect('/admin/jobs/index'); } }

index.blade.php

<div class="col-sm-8"> {!! Form::open(['method'=>'POST', 'action'=> 'JobsController@store']) !!} {{ csrf_field() }} <div class="form-group"> {!! Form::label('user_id','名前') !!} {!! Form::select('user_id[]', $users->pluck('name', 'id')->toArray(), null, ['class' => 'form-control']) !!} </div> <div class="form-group"> {!! Form::label('job_id','Job_ID') !!} {!! Form::text('job_id',null,['class'=>'form-control',]) !!} </div> <div class="form-group"> {!! Form::submit('登録', ['class'=>'btn btn-info']) !!} </div> @include('includes.form_error') {!! Form::close() !!} </div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なるほど、ユーザの一覧があってそのidを登録したいけど登録できてないということですね。

よく見てみたらpluckを使われているようなので、user_id[]の部分をuser_idにすれば解決しそうな気がします。
もしかしたらtoArray()は必要ないかもしれません。

あとはstoreメソッドの中身ですね。

'user_id' => auth()->id()

'user_id' => request('user_id')

に変えてしまいましょう。

投稿2017/08/08 12:42

編集2017/08/08 13:05
fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/08 15:35

ご指摘通りできました。 非常に勉強になりました。
退会済みユーザー

退会済みユーザー

2017/08/08 15:37

あと一点だけお聴きたいのですがuser_idとjob_idはjobテーブルに保存できましたが、 index.blade.phpでどうのようループして、userテーブルの名前を表示できますか?
退会済みユーザー

退会済みユーザー

2017/08/08 15:38

{{$job->users->name}}ではできないです
fagai

2017/08/08 15:56

$job->user()->nameではないでしょうか?Modelでuserという名前でメソッドを作っているのでそれにアクセスする必要があります。
退会済みユーザー

退会済みユーザー

2017/08/08 16:01

ありがとうございます!! $job->user()->nameで見ると下記のエラーが出てしまいます Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name
fagai

2017/08/08 16:03

すみません、$job->user->nameで良さそうです
退会済みユーザー

退会済みユーザー

2017/08/08 16:07

ありがとうございます! できました!!
退会済みユーザー

退会済みユーザー

2017/08/09 04:48

すみません!! 一つのUserが複数のJOB_IDを登録する場合はとうすればいいですか?
fagai

2017/08/09 05:16

それはいまエラーか何かでできてないという事ですか? もしエラーであればunique indexがuser_idに貼られていないか確認してください。
退会済みユーザー

退会済みユーザー

2017/08/09 05:23

いいえ、エラーはでていません、 一つのUserが複数JOB_IDを登録する場合はどのようにすればいいかなと考えて思いつかなくて質問させていただきました。 色々やって見たくてしょうがないです!!
fagai

2017/08/09 05:41

基本的には配列等で渡してそれをぐるぐる回してデータを入れるって感じですかね。 妥協するならjob_idをカンマ区切り等で渡してexplode関数で分割して配列化します。 フロントで頑張るならjavascript等で制御する必要が出てきますね
退会済みユーザー

退会済みユーザー

2017/08/09 05:57

なるほど!!わかりました、ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問