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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

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

Q&A

解決済

1回答

1180閲覧

Laravel5.2 リレーションについて

AlwaysOreHungry

総合スコア33

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2016/09/19 17:03

現在下記のようなUserモデルを作成しました。
リレーションでUserのFavoriteを吐き出したいです。
一旦Controllerで吐き出したく、その場合のコードはどのようにすべきでしょうか。
Controller、Tableも参考までにご参考ください。

php

1<?php 2//User.php(Model) 3 4namespace App; 5 6use Illuminate\Foundation\Auth\User as Authenticatable; 7use App\Favorite; 8 9class User extends Authenticatable 10{ 11 /** 12 * The attributes that are mass assignable. 13 * 14 * @var array 15 */ 16 protected $fillable = [ 17 'name', 'email', 'password', 18 ]; 19 20 /** 21 * The attributes that should be hidden for arrays. 22 * 23 * @var array 24 */ 25 protected $hidden = [ 26 'password', 'remember_token', 27 ]; 28 29 30 public function favorites() 31 { 32 return $this->hasMany(Favorite::class, 'id', 'user_id'); 33 } 34} 35
mysql> select*from favorites; +----+---------+----------+---------------------+---------------------+ | id | user_id | favorite | created_at | updated_at | +----+---------+----------+---------------------+---------------------+ | 1 | 14 | 12 | 2016-09-08 03:31:41 | 2016-09-08 02:32:46 | | 2 | 12 | 38 | 2016-09-16 02:13:49 | 2016-09-16 00:13:47 | | 3 | 14 | 17 | 2016-09-16 04:13:51 | 2016-09-16 00:13:51 | | 4 | 14 | 21 | 2016-09-16 04:14:43 | 2016-09-16 00:14:59 | | 5 | 14 | 46 | 2016-09-16 04:14:44 | 2016-09-16 00:14:00 | | 6 | 11 | 63 | 2016-09-16 23:20:06 | 2016-09-16 21:20:36 | | 7 | 11 | 46 | 2016-09-16 23:20:50 | 2016-09-16 23:20:50 | +----+---------+----------+---------------------+---------------------+

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Http\Requests; 7use DB; 8use App\Http\Controllers\Controller; 9use App\Favorite; 10use App\User; 11 12 13class TestController extends Controller 14{ 15 16 public function favoritepage( $id ) 17 { 18 $user = User::all(); 19 $favorites = $user->favorites()->where('id', $id)->get(); 20 21 echo $favorites; 22 23 24 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

仮にご質問を「ユーザ毎のfavoriteの一覧を作りたい」と解釈すると以下のコードでできます。

php

1public function favoritepage( $id ) 2{ 3 $users = User::all(); 4 foreach ($users as $user) { 5 $favorites[$user->id] = $user->favorites()->lists('favorite'); 6 } 7 8 // echoでは配列は出力できない。文字列のみ。 9 // echo $favorites; 10 11 // Laravelには`die(var_dump($hoge))`のようなことをやってくれる関数があるのでそれを使う。 12 dd($favorites); 13}

追記

favoritepageメソッドの引数$idがユーザのIDとするとこのように書けば良いはずです。

php

1public function favoritepage( $id ) 2{ 3 $favorites = User::find($id)->favorites()->lists('favorite'); 4 5 dd($favorites); 6}

そしてどうやらhasManyメソッドの引数の順序が違うみたいです。

php

1return $this->hasMany(Favorite::class, 'user_id', 'id');

投稿2016/09/20 00:19

編集2016/09/20 15:17
natady

総合スコア606

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

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

AlwaysOreHungry

2016/09/20 04:06

Natady様、いつも本当にありがとうございます。帰宅後に確かめてお返事できればと思います!
natady

2016/09/20 04:08

一緒にLaravelの勉強がんばりましょう!
AlwaysOreHungry

2016/09/20 13:05

検証の結果下記のような配列が出てきました。 array:16 [▼ 1 => Collection {#215 ▶} 2 => Collection {#214 ▶} 3 => Collection {#213 ▶} 4 => Collection {#212 ▶} 5 => Collection {#211 ▶} 6 => Collection {#210 ▶} 7 => Collection {#209 ▶} 8 => Collection {#208 ▶} 9 => Collection {#207 ▶} 10 => Collection {#206 ▶} 11 => Collection {#205 ▶} 12 => Collection {#204 ▶} 13 => Collection {#203 ▶} 14 => Collection {#202 ▶} 15 => Collection {#236 ▶} 16 => Collection {#237 ▶} ] Userは仮で16人登録していますので、Userテーブルの”id”に紐づいた結果のような気がします。配列の中身は全て下記のような空の[]になっております。 14 => Collection {#202 ▼ #items: [] } 私のやりたいことがかなり分かりにくかったと思います。 例えばUserの14番がログイン(=function favoritepage引数のidが14)→favoriteテーブルのuser_idを14で絞込み12,17,21,46と出力が出る、といったものでした。 分かり辛く申し訳ありません。
AlwaysOreHungry

2016/09/20 15:25

ありがとうございました!見事に解決致しました!!! いつか私もNatady様のお役に立てる日が来るの....か。
natady

2016/09/20 16:23

解決できてよかったです! hasManyの問題は私も同じような環境を構築してからやっと気付きました。やっぱりドキュメント読むのは大事ですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問