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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

Laravel 5

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1568閲覧

Laravel:pluckで取得した値をforeachで取得できない

CCHH

総合スコア11

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

Laravel 5

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/09/05 16:53

前提・実現したいこと

pluckで取得したidをforeachで取得出来ず困っています。

やりたいこと
チームに所属しているチームメンバーのidを取得したい。

該当のソースコード

php

1//チームモデル 2class Team extends Model 3{ 4 5 public function team_users() 6 { 7 return $this->hasMany('App\TeamUser'); 8 } 9} 10//チームユーザーモデル 11 12class TeamUser extends Model 13{ 14 protected $guarded = ["id"]; 15 16 public function team() 17 { 18 return $this->belongsTo('App\Team'); 19 } 20 } 21 22//コントローラー 23public function getTeamUsers() 24{ 25 $user_id = Auth::user()->id; 26 $team = Team::where('user_id',$user_id) 27 ->value('id'); //ログインユーザーが所属してるチームid取得 28 $team_users = TeamUser::where('team_id',$team) 29 ->pluck('user_id'); //そのチームに所属しているuser_id取得 30 foreach ($team_users as $team_user){ 31 $team_userId:$team_user 32 } 33 return $team_userId; 34}

試したこと

デベロッパーツールで確認したところ、$team_usersの中身は、
(2)[1,2]
となっていました。
この[1,2]に対してforeach処理をしたく上記のように記載しましたが、
上記記載にて得られる値は、
$team_userId = 2
です。
配列に対してforeach処理が効いておらず、配列の中の個数である2を取得しているのかな?と思っています。
やりたいことは
$team_userId = 1,2
です。

お手数おかけしますが、ご存知の方はご教授頂ければ幸いです。

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

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

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

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

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

phper.k

2020/09/06 02:24

laravel 以前にPHPの基礎知識はございますか??
CCHH

2020/09/06 02:27

あやふやかもしれません。 勉強不足で申し訳ございません。
guest

回答1

0

ベストアンサー

Laravel 以前の問題が複数あります。

(1) 基礎文法

diff

1foreach ($team_users as $team_user){ 2- $team_userId:$team_user 3+ $team_userId = $team_user; // 代入してもいないし、セミコロンもない。 4} 5return $team_userId;

これじゃあ、$team_userId に値が入るわけないです。
他人の貴重な時間をいただくんですから、質問文は丁寧に書くべきです。
インデントもぐちゃぐちゃなのはいただけないです。


diff

1- $user_id = Auth::user()->id; 2+ $user_id = Auth::id(); 3 4/** 複数モデルになっているなら変数名は複数形の方が妥当 */ 5$teams = Team::where('user_id', $user_id)->get(); //ログインユーザーが所属してるチームid取得 6 7// dump($teams); // ここでどんな値になっているか確認してください 8 9$team_users = TeamUser::whereIn('team_id', $teams->pluck('id')) 10 ->pluck('user_id'); //そのチームに所属しているuser_id取得

https://readouble.com/laravel/7.x/ja/queries.html


Laravelの便利な機能であるリレーションを十分に活かしていません。

↓改善したソース

php

1$user_id = Auth::id(); 2 3$teams = Team::with(['team_users'])->where('user_id', $user_id)->get(); 4$team_users = $teams->map(function($team){ 5 return $team->team_users->pluck('user_id'); 6}); 7 8dd($team_users);

投稿2020/09/06 02:41

編集2020/09/06 05:24
phper.k

総合スコア3923

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

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

CCHH

2020/09/06 05:23

とても丁寧なご回答ありがとうございます! 基礎文法の部分は、完全に私の記述ミスでした・・・すいません。 インテンドの件もご指摘ありがとうございます、以後注意します。 上記、 $team_users = $teams->map(function($team){ return $team->team_users }); までは取得出来ましたが(取得内容は[Array(2)])、 $team_users = $teams->map(function($team){ return $team->team_users->user_id; }); とすると "Property [user_id] does not exist on this collection instance." エラーが出ています。 [Array(2)]の中は、 0: (2) [{…}, {…}, __ob__: Observer] となっていてその中は、 0: {…} 1: {…} さらにこの中身にやっと {team_id:1 , user_id:1...} と記載がありました。 つまり0:[Array(2)]からuser-idを取得するためには、 もう少し処理を記載しなくてはいけないのかなと考えていますが、合っていますでしょうか?
phper.k

2020/09/06 05:26 編集

修正しておいた DBの構造も分からずに回答するのはこれ以上無理です。
CCHH

2020/09/06 10:42

お忙しい中、ご丁寧にありがとうございました!! まだ取得は出来ませんが、もう少し自分で色々試したいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問