🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

PHP

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

Q&A

解決済

2回答

610閲覧

Laravel オブジェクトを 関数の外で値を使う方法が知りたい

kumin_43

総合スコア10

Laravel

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

PHP

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

0グッド

0クリップ

投稿2019/12/15 06:54

編集2019/12/15 10:49

前提・実現したいこと

$foo オブジェクトを 関数の外で値を使う方法が知りたいです。

現状だと、$fooが上書きされていってしまい、最後のオブジェクトしか取得できません
基本的な質問ですみません。。

該当のソースコード

php

1 2// $this->getHogeUser(); は Collectionを返す 3 4public function getFooUser() 5 { 6 $hoge_users = $this->getHogeUser(); 7 foreach ($hoge_users as $user) { 8 $foo = FooUser::select('id') 9 ->where('id', '=', $user->id) 10 ->get(); 11 } 12 return $foo; 13 } 14

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/12/15 07:04 編集

クラス名が不明なのでコードで回答することができません。 $this->getHogeUser();の実装が不明なのでどんな値が返ってくるのかわかりません。
退会済みユーザー

退会済みユーザー

2019/12/15 07:07

> 現状だと、$fooが上書きされていってしまい、最後のオブジェクトしか取得できません 最終的に何を返したいのがを明示してください
kumin_43

2019/12/15 07:13

回答ありがとうございます >最終的に何を返したいのがを明示してください $fooをDBに入れたいので、 DBにデータを入れる関数の中で使いたいです。
退会済みユーザー

退会済みユーザー

2019/12/15 07:15 編集

$foo は何かを聞きたいのです。
guest

回答2

0

/** * @return FooUser[] */ public function getFooUser() { $hoge_user_ids = $this->getHogeUser()->pluck('id'); return FooUser::whereIn($hoge_user_ids)->get(); }

※$this->getHogeUser()が Collection を返す前提です。

投稿2019/12/15 07:13

編集2019/12/15 07:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kumin_43

2019/12/15 07:19

ご回答ありがとうございました。 m.ts10806様の回答で用途が満たせました。お時間いただきありがとうございます
退会済みユーザー

退会済みユーザー

2019/12/15 07:19

パフォーマンスは犠牲にするならそれでいいと思います。
guest

0

ベストアンサー

用途がわからないけど配列にして使いたいのだけ取り出すとか

php

1 $hoge_users = $this->getHogeUser(); 2 $foo = []; 3 foreach ($hoge_users as $user) { 4 $foo[] = FooUser::select('id') 5 ->where('id', '=', $user->id) 6 ->get(); 7 } 8 return $foo;

でも使うのがidだけであればwhereInとか使えばforeachせずとも一発で取れそうな気がしなくもないですけど。

select id from foouser where in (select id from hogeuser)

いやこれならinner joinで済むか
select foo.id from foouser foo join hogeuser hoge on hoge.id = foo.id

投稿2019/12/15 07:10

m.ts10806

総合スコア80875

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

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

kumin_43

2019/12/15 10:38 編集

ご回答ありがとうございます! >配列にして使いたいのだけ取り出すとか 取り出して他で使いたい は合っているのですが 配列にしてしまうと collectionのメソッドが使えないので オブジェクトのまま取り出したいです が、方法はありますでしょうか? > 用途がわからないけど selectにidを置いていますが、idだけではなく、他のカラムも引っ張ってくる想定です
m.ts10806

2019/12/15 11:37

FooUser::select()でget()してるのは同じですよ。配列内のひとつひとつはコレクションです。
m.ts10806

2019/12/15 11:38

>selectにidを置いていますが、idだけではなく、他のカラムも引っ張ってくる想定です もう少し表の結合について調べられたほうが良いかと思います。
kumin_43

2019/12/15 12:45

> 配列内のひとつひとつはコレクションです。 ↑こちら理解できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問