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

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

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

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

PHP

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

Q&A

解決済

1回答

296閲覧

laravelでmixiクローンを作っています。

KeisukeNebashi

総合スコア18

Laravel

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

PHP

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

0グッド

0クリップ

投稿2018/10/26 01:50

編集2018/10/26 03:05

前提・実現したいこと

php(laravel)で同じ趣味を持つ人同士でコミュニティを作成し、その中で自由にツイートをすることのできるアプリを作成しています。

コミュニティ内でユーザーが作成したツイートに対して内容とユーザーid,コミュニティidを保存したいのですが、うまくいきません。

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

ツイートを作成し、保存しようとすると以下のようなエラーが発生します。

"Method Illuminate\Http\Request::community does not exist."

該当のソースコード

php

1コード 2public function contribution(Request $request) 3 { 4 5 $this->validate($request, Tweet::$rules); 6 7 $tweet = new Tweet; 8 $tweet->community_id = $request->community()->id; 9 $tweet->user_id = $request->user()->id; 10 $tweet->content = $request->content; 11 12 $tweet->save(); 13 14 return view('admin/app/profile'); 15 16 }

php

1@extends('layouts.community') 2@section('title', 'ツイート作成') 3 4@section('content') 5 <div calss="container"> 6 <div class="row"> 7 <div class="col-md-6 mx-auto"> 8 <form action="{{ action('Admin\AppController@contribution', ['id' => $community->id]) }}" method="post"> 9 @if (count($errors) > 0) 10 <ul> 11 @foreach($errors->all() as $e) 12 <li>{{ $e }}</li> 13 @endforeach 14 </ul> 15 @endif 16 <div class="form-group row"> 17 <div class="col-md-10"> 18 <textarea class="form-control" name="content" rows="10">{{ old('content') }}</textarea> 19 </div> 20 </div> 21 {{ csrf_field() }} 22 <input type="submit" class="btn btn-primary" value="ツイートする"> 23 </form> 24 </div> 25 </div> 26 </div> 27@endsection 28

試したこと

ネスト?というものが関係していると知り合いに教えていただき調べていたのですが、どこが間違っているのかさっぱりわかりません。

わかりにくい説明だと思いますがよろしくお願いいたします。

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

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

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

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

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

yoorwm

2018/10/26 01:59

質問文を読んでいる側としてはどこが正しいのかさっぱり分からないのですがとりあえず、$request->community()というのがどのような定義をしているのか?を書いてみてください。
KeisukeNebashi

2018/10/26 02:12

返信ありがとうございます。$tweet->community_id = $request->community()->id;はcommunityテーブルから該当するidを取得してそれを$tweetテーブルのcommunity_idに保存させていると解釈しております。よろしくお願い致します。
TAMA000

2018/10/26 02:54

$requestを渡しているviewのコードも載せていただけますか?
KeisukeNebashi

2018/10/26 03:06

質問を編集し、記載しました。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

$requestの使い方が間違っているとおもいます。
$requestはフォームに入力した値をnameで渡すので、今回の場合だと

<textarea class="form-control" name="content" rows="10">{{ old('content') }}</textarea>

の値が"$request->content"で取得できます。

なのでcommunityとuserは別の方法で渡すべきかと。
部分的ですが、参考例です。

PHP

1use App\Community; 2 3public function contribution(Community $community, Request $request) 4 { 5 6 $this->validate($request, Tweet::$rules); 7 8 $tweet = new Tweet; 9 $tweet->community_id = $community->id; 10 $tweet->user_id = Auth::user()->id; // communityとリレーションしているなら$community->user->id;とかもOK 11 $tweet->content = $request->content; 12 13 $tweet->save(); 14 15 return view('admin/app/profile'); 16 17 } 18

ルーティングも考慮すべきなのですが、もしurlが"//{community}/"のようにcommunityのidが入る形になっているのであれば、上記の記述でidが取得できます。

$requestで取得したいのであれば、隠しフォームを作成することもできます。
"<input type="hidden" name="community" value="{{ $community->id }}">"
これで$request->communityからidが取得できます。

投稿2018/10/26 03:24

TAMA000

総合スコア39

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

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

KeisukeNebashi

2018/10/27 00:42

返信ありがとうございます。 requestの使い方をまだ理解できていませんでした。 教えてくださりありがとうございました。 参考例を見ながらやってみたところ、今度は Class 'App\Http\Controllers\Admin\Auth' not found というエラーが出てきました。 urlは以下のようになっています。 http://localhost:8000/admin/app/tweet/1 また、use Illuminate\Support\Facades\Auth;が記述されていなかったためかと思い、追記したところ Trying to get property of non-object" とエラーが出ました。 続けての質問で申し訳ありませんが、アドバイスいただきたいです。 よろしくお願い致します。
KeisukeNebashi

2018/10/27 01:10

続け様に申し訳ありません。 再度ログインしたところ、上記の問題は解決したように思われます。 代わりに下記のエラーが発生しました。 SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'community_id' cannot be null (SQL: insert into `tweets` (`community_id`, `user_id`, `content`, `updated_at`, `created_at`) values (, 1, q, 2018-10-27 01:04:30, 2018-10-27 01:04:30)) こちらを読む限り、community_idに保存ができていないということでしょうか?
TAMA000

2018/10/27 08:46

もしかしたらURLの値が渡されていないのかもしれません。 http://localhost:8000/admin/app/tweet/1 web.phpで上記のURLの"1"のところが"{community}"になっていますか? "{community}"が”public function contribution(Community $community, Request $request)”の$communityになります。
KeisukeNebashi

2018/10/29 00:13

返信遅れてしまい、申し訳ありません。 {community}ではなく、{id}となっておりました。 {community}に変えたところ無事保存することができました。 丁寧に教えていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問