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

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

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

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

PHP

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Laravel 5

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

Q&A

解決済

2回答

5490閲覧

laravel 検索機能 複数テーブル

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

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

PHP

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Laravel 5

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

0グッド

0クリップ

投稿2019/11/30 03:37

編集2019/11/30 04:06

リレーションを持たない複数のテーブルを一括で検索して表示したいです。
例えば、全くの別テーブルであるfruits tableとvegetables tableの検索結果を結合してpaginateして表示することは可能なのでしょうか?

php

1// キーワードを取得 2$keyword = $request->input('keyword'); 3 4// もしキーワードが入力されている場合 5if (!empty($keyword)) { 6 // フルーツテーブルから検索 7 $fruits = DB::table('fruits') 8 ->where('name', 'like', '%'.$keyword.'%'); 9 // 野菜テーブルから検索 10 $vegetables = DB::table('vegetables') 11 ->where('name', 'like', '%'.$keyword.'%'); 12 13 // 検索結果を結合したい 14 $all = collect($fruits)->merge($vegetables)->paginate(7); 15 16// キーワードが入力されていない場合 17} else { 18 $vegetables = DB::table('vegetables'); 19 $fruits = DB::table('fruits'); 20}

上記のコードだと
Method Illuminate\Support\Collection::paginate does not exist.
というエラーになってしまいます。

ご教示いただけると幸いです。

fruits table
id (INT)
title (VARCHAR)
body (TEXT)
created_at (TIMESTAMP)
updated_at (TIMESTAMP)

vegetables table
id (INT)
title (VARCHAR)
body (TEXT)
created_at (TIMESTAMP)
updated_at (TIMESTAMP)

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

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

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

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

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

m.ts10806

2019/11/30 03:57

テーブル定義次第です。 テーブル定義をご提示ください。
退会済みユーザー

退会済みユーザー

2019/11/30 04:06

かしこまりました。
guest

回答2

0

ベストアンサー

$all = collect($fruits)->merge($vegetables)->paginate(7);

これを

$all = $fruits->get()->concat($vegetables->get())-> forPage($request->page ?? 1, 7);

こういう感じで、getした後(SQLを発行して、出てきた戻り値のcollection)の値ならmergeやconcatで処理できるようになります。
paginateは使えなくなるので、forPageで擬似的に再現

投稿2019/11/30 05:20

mikkame

総合スコア5036

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

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

退会済みユーザー

退会済みユーザー

2019/11/30 06:03

なるほど!ありがとうございます。 forpageをviewで使うにはどうすればよいのでしょうか?
mikkame

2019/11/30 06:42

viewで使うはページャーの呼び出し(render)の事だと思いますが for pageの場合はそのような機能が無いので自作する必要があります。 (次へ、前へだけなら比較的簡単かも) 面倒な場合は、m.ts10806さんの回答のように unionするかテーブル設計を見直した方が良いでしょう。
guest

0

PHPやLaravel云々ではなく、SQLで解決可能な話ですね。
UNIONしてください。
取得カラムと定義が同じであれば難ではありません。
Laravelにメソッドも用意されています。

Laravel6.x クエリビルダ:UNION

もっとも、テーブル名が違うだけで全く同じテーブル定義にするくらいなら同じテーブルにして区分でわけたほうが仕様次第では有効と思いますが。

投稿2019/11/30 04:10

編集2019/11/30 04:21
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問