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

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

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

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

Laravel 5

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

Q&A

1回答

5544閲覧

Laravel・PHP エラーの対処

h.yamazaki

総合スコア20

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2019/02/24 08:20

laravelで以下のfunctionを呼び出すと、

Type error: Return value of App\Repositories\EloquentHospitalRepository::getHospitalBrowsingHistories() must be an instance of Illuminate\Pagination\LengthAwarePaginator, array returned

上記のエラーを出してしまいます。

$userとはログインしたユーザーの情報が渡ってくる変数で、
そのユーザー情報が入っているHospitalUserのテーブルを見て、
最終的にそれと紐づいているHospitalの病院情報をみるロジックとなっております。

php

1public function getHospitalBrowsingHistories(User $user): LengthAwarePaginator{ 2 $hospital = []; 3 $hospital_users = HospitalUser::where('user_id', $user->id)->get(); 4 foreach ($hospital_users as $hospital_user) { 5 $hospital[] = Hospital::where('id', $hospital_user->hospital_id) 6 ->where('public', true) 7 ->paginate(config('hospital-browsing-history.perPage')); 8 } 9 return $hospital; 10 }

どなたかご教授ください。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

エラーの原因はメッセージの通り、LengthAwarePaginatorを返すと宣言しているのにarrayを返しているためです。

HospitalUserのテーブルを見て、

最終的にそれと紐づいているHospitalの病院情報をみるロジックとなっております。

HospitalUserとHospitalがどう紐付いているのか、そして最終的にどうしたいのか不明ですが、
宣言通りLengthAwarePaginatorを返したいのであればforeachでごにょごにょして配列($hospital)を返すのではなく、with等を使用して関連データを取得し、最後にpaginateを呼び出してその結果を返してください。

投稿2019/02/24 08:42

編集2019/02/24 09:15
xenbeat

総合スコア4258

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

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

h.yamazaki

2019/02/26 08:40

回答ありがとうございます・ withを使用してやってみたのですが、userの情報が紐づかずにhospitalテーブルの情報が全件取得されてしまいます。 ------------------------------ public function getHospitalBrowsingHistories(): LengthAwarePaginator{ $hospitals = Hospital::with(['hospitalUsers' => function ($query) { $user = Auth::user(); $query->where('user_id', $user->id); }])->orderBy('updated_at','desc')->paginate(config('hosptial-browsing-history.perPage')); ------------------------------ このファンクションの用途はログインユーザーの閲覧した病院情報の履歴を見るメソッドで、ユーザが病院をみるたびにHospitalUsersテーブルに病院情報が溜まっていきます。HospitalUsersテーブルには、 id,hospital_id, user_id,created_at,updated_at とカラムがございます。 hospital.phpには以下のリレーションを設定しております。 ---------------------- public function hospitalUsers(){ return $this->belongsToMany('App\Models\User','hospital_users','hospital_id','user_id'); } ---------------------- 参考にしたサイトはこちらです。 https://www.wakuwakubank.com/posts/385-laravel-relation-2/ 無知ですみませんが、よろしければご教授頂きたいです。よろしくお願いします。
xenbeat

2019/02/26 09:36

> userの情報が紐づかずにhospitalテーブルの情報が全件取得されてしまいます。 本質問をクローズして新規で質問するか、本質問のタイトルおよび内容を書き直してください。 私の回答は、コメントいただいた質問(エラー解消後の質問)および要件に対しては無効となります。 今の質問タイトルおよび内容に対するものなので。 別にwithじゃなくてもjoinとかでも良いのですが、要件通りに関連データを抽出する方法がわからないというのは当初の問題とは全く別問題となります。 再質問をして要件、問題、ソースコードを明示してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問