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

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

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

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

Laravel 5

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

Q&A

解決済

1回答

9071閲覧

laravel5.1 eloquent ifを伴ってwhere句を組み立てたい

monki

総合スコア12

PHP

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

Laravel 5

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

0グッド

1クリップ

投稿2016/03/06 03:33

下記のようにif文で条件分岐させてwhere句を組み立てれないのでしょうか?

php

1 2/** 3 * フィルター条件によってWhere句を組み立てる 4 * この後も条件によってwhere句を追加したいので、get()せずに変数に入れる 5 */ 6 switch ($request->get('filter')) { 7 case '1': 8 $query = QAManage::where('id', null); 9 break; 10 case '2': 11 $query = QAManage::where('user_id', $this->userID); 12 break; 13 case '3': 14 $query = QAManage::whereNotNull('p_qa_id'); 15 break; 16 default: 17 $query = QAManage::where('delete_flg', ""); 18 break; 19 } 20 21/** 22 * 上記でwhere句を作った後に、if文を使ってwhere句を追加する 23 * ※下記エラーが発生する。 24 * exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 25 * 'Call to undefined method Illuminate\Database\Eloquent\Builder::wnere()' 26 */ 27 if ($request->get('t1')) { 28 $query = $query::wnere('regist_time', '>=', $request->get('t1')); 29 } 30 if ($request->get('t2')) { 31 $query = $query::wnere('regist_time', '<=', $request->get('t2')); 32 } 33

このように、一旦変数に入れて、以降で再度where句を組み入れるなどは出来ないものでしょうか?

よろしくお願いいたしますmm

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

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

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

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

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

guest

回答1

0

ベストアンサー

その状態であればifの方はそのまま$query->whereと書けば良いのではないでしょうか?(代入する必要はない)

一応、今回のプログラムではswitchで先に作っているので良いですが、例えばifでqueryの組み立てを変える場合はqueryメソッドを利用すると良いです。

$query = QAManage::query(); if($keyword = $request->get('keyword', false)) { $query->where('keyword', $keyword); } $query->get();

といった感じですね。

投稿2016/03/06 04:04

編集2016/03/06 04:05
fagai

総合スコア2158

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

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

monki

2016/03/06 04:30

ありがとうございます!美しく解決できました。 また、お恥ずかしいのですが、スペルミスがありましたw × $query = $query::wnere('regist_time', '>=', $request->get('t1')); ◯ $query = $query::where('regist_time', '>=', $request->get('t1'));
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問