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

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

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

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

Laravel 5

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

Q&A

解決済

3回答

5010閲覧

【laravel】変数にddをかけたところ、Undefined indexがエラー表示されます。

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

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

Laravel 5

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

0グッド

1クリップ

投稿2017/07/13 08:58

編集2017/07/13 09:47

###前提・実現したいこと
検索ができないバグを探していたところ、インデックスが定義されていないと表示されおそらくこれがバグの原因と思われます。
ただ、このインデックスの未定義の問題を解消する方法が見つかっておりません。
ご教授いただけますでしょうか。
よろしくお願いいたします。

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

ErrorException in SearchController.php line 59: Undefined index: search

###該当のソースコード

PHP

1public static function searchCommon($where = null, $sortFunc = null) 2 { 3 $input = request()->all(); 4 $validator = \Validator::make($input, [ 5 'q' => 'string|max:255', 6 'page' => 'integer|not_in:0,1', 7 'search' => 'integer' 8 ]); 9 if ($validator->fails()) return app()->abort(404); 10 $page = isset($input['page']) ? (int)$input['page'] : 1; 11 $search = isset($input['search']) ? (int)$input['search'] : 0;dd($input['search']); 12if ($search) { 13 $data = Search::select('result', 'query')->where('id', $search)->first(); 14 $ids = $data ? $data['result'] : []; 15 $q = isset($data['query']['q']) ? $data['query']['q'] : ''; 16 } else { 17 $q = isset($input['q']) ? $input['q'] : ''; 18 $query = Fulltext::where('type', '<>', 'job'); 19 if ($q !== '') $query->whereIndex($q); 20 if (!is_null($where)) $query->where($where); 21 $ids = NULL; 22 if ($sortFunc) { 23 $query = $query->select('id', 'type', 'main_id')->get()->toArray(); 24 usort($query, $sortFunc); 25 $ids = array_pluck($query, 'id'); 26 } else { 27 $ids = array_map('intval', $query->orderBy('time','DESC')->lists('id')->toArray()); 28 } 29 // $search {{{ 30 $search = new Search(); 31 $search['result'] = $ids; 32 $search['query'] = ['q' => $q]; 33 $search->save(); 34 $search = $search['id']; 35 // }}} 36 } 37}

view

1<form class="clearfix m-t-50" method="GET" action="{{url('search')}}"> 2<div class="input-group input-group-lg col-sm-offset-2 col-sm-8 p-a-0"> 3<input type="text" name="q" class="form-control submit13" placeholder="検索語句を入力してください" title="検索語句" value="{{$q or ''}}"> 4<span class="input-group-btn"> 5<button class="btn btn-success" type="submit">検索</button> 6</span> 7</div> 8</form>

###補足情報(言語/FW/ツール等のバージョンなど)
他に必要な情報等ありましたら、ご連絡いただけますでしょうか?
何卒よろしくお願いいたします。

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

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

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

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

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

Archsted

2017/07/13 09:44

formから、name="search" の要素が送られていない可能性が高いです。可能であれば(キーワード入力と検索ボタンだけでなく)form要素の中身を全て追記してもらえないでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/13 09:47

formの中身すべて追記いたしました。よろしくお願いいたします。
guest

回答3

0

検索条件を入力して検索するのとは別に、検索した条件と結果はDBに保持しておき
過去に検索した事のある条件を選ぶ事でも検索結果が表示されるシステムとお見受けします。
恐らく、後者の検索をした時にのみsearch=(Searchテーブルのid)が付与されるのでしょう。

「検索ができない」とおっしゃっている原因は一度置いておき、本題となっていた
「ddでUndefined index: searchが出る」という理由については、
dd($input['search']);という記述は,$inputにsearchというキーが必ず存在する事を前提としており、
少なくても前者の検索ではリクエストの中にsearchというキーで値が存在しないから、となるかと思います。

投稿2017/07/13 10:28

Archsted

総合スコア452

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

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

退会済みユーザー

退会済みユーザー

2017/07/13 10:35

ご回答ありがとうございます。 仰る通り、検索内容を保存するようになっているものと思われます。 Archsted様が仰りたいのは、みるべきポイントを誤っている可能性があるということでしょうか?
Archsted

2017/07/13 12:14

検索内容を入力して検索ボタンを押した時にエラーが発生するのはある意味正しいですが、 もし保存した検索を選んだ時にも同様のエラーが発生した場合はおかしいと考えられます。 その場合はルーティングの設定、エラーが出た時のURL、Viewの保存した検索を表示している部分のコードなど、追加でお聞きしなくてはならない項目が多く、現在の質問とは少し離れた内容となってしまうため「リクエストに含ませたはずのパラメータが取得できない」というような内容の質問で再度質問された方がよいかなと思います。 また、パラメータは取得できるのに結果が正しくないとなると別の観点で見る必要があるため、「検索ができないバグ」の具体的な内容(エラーが表示される、画面が真っ白、想定していないデータが表示されてしまう等)を記載の上、改めて質問されるとよいかと思います。
guest

0

サーバに来たリクエスト中にsearchが無いのが原因っぽいです。

Viewは一部分のようなので推測になりますが$input['search']はクエリストリング中で渡しているような感じでしょうか?

投稿2017/07/13 09:42

balaenoptera

総合スコア222

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

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

0

ベストアンサー

$input['search']が無い、というエラーが出ているようですが…

$input = request()->all();ですが、requestの$が抜けているようですが大丈夫ですか?

後は、viewに設定されているnameに誤字等が無いかどうか確認してみては如何でしょうか?
「検索ができないバグ」というのは常に$searchが0になっているからではありませんか?

投稿2017/07/13 09:11

編集2017/07/13 09:24
motuo

総合スコア3027

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

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

退会済みユーザー

退会済みユーザー

2017/07/13 09:16

ご回答ありがとうございます。 motuo様の仰る通り、検索ができていないのは、$searchが0になっているからです。 また、requestの変数がないということでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/13 09:23

viewのnameには誤りはありませんでした。 コードを追加いたしましたのでご確認いただけますでしょうか。
motuo

2017/07/13 09:25

>$input = request()->all();ですが、requestの$が抜けているようですが大丈夫ですか? という部分については、確認頂けたのでしょうか? 追記されたソースを見ても、やはりrequestの$が抜けている様に見えますが…
退会済みユーザー

退会済みユーザー

2017/07/13 09:30

それはつまり、$input = $request()->all();ということでしょうか? このようにした場合、未定義の変数があるという別の問題が発生いたします。 元のソースをローカル環境に落としたものなので、どうしてうまくいかないのかを探りあぐねております。
Archsted

2017/07/13 09:36

直接の質問の答えではなく恐縮ですが、上で話している「$」が抜けているのではないかというご指摘については、ここではリクエストインスタンスを取得するrequestヘルパ関数を呼んでいるので、つかない記述のままで正しいかと思います。
motuo

2017/07/14 00:14

なるほど。 では、dd($input)とした場合はどの様になりますか?$inputの変数の内容を確認させてもらえないでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/14 01:04

検索フォームで「あああ」と入力し、検索した場合、下記が出力されます。 array:1 [ "q" => "あああ" ]
motuo

2017/07/14 01:25 編集

提示頂いたFormでは入力項目は1つでnameは'q'になっていますから、やっぱりそうなりますよね… 「viewのnameには誤りはありませんでした。」とコメントにありましたが、提示頂いたFormではsearchの存在が確認できません。それがundefined indexの直接の原因だと思いますが… 例えば、formに下記の要素を追加したらエラーは消えませんか? <input type="text" name="search" title="test" value="検索"> または、formにsearchというnameを含んだ要素が表示されない事を問題としているのでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/14 01:43

いえ、問題は、フリーワードの検索フォームに入力された文言と一致するものが表示されないことでございます。 また、ddなど付けずに検索をかけた際エラーは表示されません。
motuo

2017/07/14 01:45

提示頂いた情報から読み取ると「フリーワードの検索フォームに入力された文言」は、$input['q']に入っているように見えるのですが… $input['search']の出所が分からないのです…
退会済みユーザー

退会済みユーザー

2017/07/14 01:58

失礼いたしました。 入力された文言が出力されてはいるのですが、その文言と合致したデータがviewに表示されないというのが問題となります。
motuo

2017/07/14 02:22 編集

すいません。私が段々と分からなくなってきました。 $input['search']は仰る問題とはまた、関係無いのでは??という気がしてきました。 上述の処理を見る限り、 if ($search) { ~~~~ } else {   ~~~~ } となっています。まず、大前提として$searchは、viewからseachが渡されていないので必ず0になりますよね。(isset($input['search']) ? (int)$input['search'] : 0;)があるので… という事は、この場合、else処理が必ずされる事が分かるかと思います。 という事は、「その文言と合致したデータがviewに表示されない」問題はこのelseの処理内でのデータ検索が意図した通りに動かない事に起因しているのではないでしょうか? もし、そうだとしたらelseの処理の内容を再度、確認した上で改めて別の質問にされた方が良いかと思います。
退会済みユーザー

退会済みユーザー

2017/07/14 02:25

ご指摘ありがとうございます。 仰る通り、else以下が問題となると思われます。 お手間をとらせてしまい申し訳ございませんでした。
退会済みユーザー

退会済みユーザー

2017/07/14 04:06

すみません。 最後にもう一つだけ質問をさせてください。 $search['query'] = ['q' => $q]; にてdd($search)をしたところ下記のような表示がされました。 Search {#304 ▼ #table: "searches" #casts: array:3 [▼ "id" => "integer" "result" => "array" "query" => "array" ] #connection: null #primaryKey: "id" #perPage: 15 +incrementing: true +timestamps: true #attributes: array:2 [▼ "result" => "[]" "query" => "{"q":"\u4f1a\u8a08"}" ] #original: [] #relations: [] #hidden: [] #visible: [] #appends: [] #fillable: [] #guarded: array:1 [▶] #dates: [] #dateFormat: null #touches: [] #observables: [] #with: [] #morphClass: null +exists: false +wasRecentlyCreated: false } "query" => "{"q":"\u4f1a\u8a08"}" のところで文字化けが起こっているものと思われますが、認識としてあっているでしょうか? もしそうでしたら、文字コードの変更や文字化けが起こらないようにするなど別の改修が必要になると思っております。 よろしくお願いいたします。
motuo

2017/07/14 05:48

$qにはUTF-8で「会計」という文字が入っているんですかね? 確かにどこかの文字コードがでおかしくなっている気がします。
退会済みユーザー

退会済みユーザー

2017/07/14 06:12

ご回答ありがとうございます。 仰る通り「会計」という文字を入れて検索をかけました。 この場合、入力された文字が化けてしまっているのでしょうか? それともmysql内で設定されている文字コードがおかしいのでしょうか?
motuo

2017/07/14 06:42

入力されている文字が化けているのだと思います。 私の環境で漢字を入れると下記の様に出力されますので。 Request {#40 ▼ #json: null ##中略## +request: ParameterBag {#41 ▼ #parameters: array:4 [▼ "searchString" => "会計" ] } ##中略## #defaultLocale: "en" }
退会済みユーザー

退会済みユーザー

2017/07/14 07:03

ご確認ありがとうございます。 入力された文字のコードを設定する箇所を探して、そこを修正してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問