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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2525閲覧

laravelで投稿にuser_idを入れたい

yuuki1616

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/09 15:41

前提・実現したいこと

laravelで写真付き掲示板を実装しているのですが、投稿にuser_idが入らず、エラーが発生します。
psqlでidを見た結果(この1を投稿のuser_idに入れたいです)

psql -h laradock_postgres_1 -U default -d default default=# select id from public.user; id --- 1

発生している問題・エラーメッセージ

投稿時に下記が発生
62983038は多分githubのidだと思われる(githubログインを実装しているので、、)

Illuminate\Database\QueryException SQLSTATE[23503]: Foreign key violation: 7 ERROR: insert or update on table "posts" violates foreign key constraint "posts_user_id_foreign" DETAIL: Key (user_id)=(62983038) is not present in table "users". (SQL: insert into "posts" ("user_id", "user", "image_file_name", "image_title", "updated_at", "created_at") values (62983038, user1, qKnFVDnnnAMb8ItjeGvq8yqGxnNLMUsAQCe0PfEZ.jpeg, eeeeeeeeeeeeeeeee, 2020-09-09 ...

該当のソースコード

PostController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Foundation\Auth\User; use App\Models\Post; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; use Socialite; class PostController extends Controller { public function index() { return view('post'); } //画像およびコメントアップロード public function upload(Request $request){ $validator = Validator::make($request->all(), [ 'file' => 'required|max:10240|mimes:jpeg,gif,png', 'comment' => 'required|max:191' ]); $file = $request->file('file'); $path = Storage::disk('s3')->putFile('/', $file, 'public'); $token = $request->session()->get('github_token', null); try { $user = Socialite::driver('github')->userFromToken($token); } catch (\Exception $e) { return redirect('login/github'); } $client = new \GuzzleHttp\Client(); $res = $client->request('GET', 'https://api.github.com/user/repos', [ 'auth' => [$user->user['login'], $token] ]); Post::create([ 'user_id' => $user->id, 'user' => $user->nickname, 'image_file_name' => $path, 'image_title' => $request->comment ]); return redirect('index'); } public function delete($id) { Post::find($id)->delete(); return redirect('index'); } }

2020_06_16_145959_create_posts_table.php

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePostsTable extends Migration { public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users'); $table->string('user'); $table->string('image_file_name',100); $table->string('image_title',100); $table->timestamps(); }); } public function down() { Schema::dropIfExists('posts'); } }

試したこと

Post::create時に'user_id' => Auth::id()で試したがgithubでのログインなのでうまくいかなかった

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

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

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

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

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

phper.k

2020/09/19 03:06

デバッグ方法について全く検討もつかない状態ですか?
guest

回答1

0

Key (user_id)=(62983038) is not present in table "users".

現在出ているエラーは、 posts.user_id から users.idforeign_keyをはっているのに、
users テーブルにない idposts テーブルの user_id に登録されようとしているためエラーになっています。

そのため、正しい登録の流れとしては以下のようになるかと思います。
users テーブルにレコードを作成し、そのidを取得
(現在登録まではすんでいるようであれば、 users.id を取得するのみ)
②取得したiduser_id として、postsテーブルにレコードを追加する

投稿2020/09/10 01:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yuuki1616

2020/09/19 02:37

コメントありがとうございます! select id from public.user; でレコードを確認し、 $user = Socialite::driver('github')->userFromToken($token); でユーザーを取ってきて、 Post::create([ 'user_id' => $user->id, の部分でidを取り出し、postsテーブルに追加している認識なのですが、違いますかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問