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

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

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

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

Laravel 5

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

Q&A

2回答

6137閲覧

Laravel データベースから取得した値をVIEWに表示する方法。

twobass

総合スコア20

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2018/07/24 02:47

質問に対する「答え」に対して「いいね」する機能を設置しています。
ユーザが、どの「答え」に「いいね」したのかは確認できますが、
「答え」の横に、何人の人が「いいね」したのかカウント表示させたいです。

answersテーブル
id
user_id
theme_id
kotae

user_favoriteテーブル(中間テーブル)
id
user_id
favorite_id

UsersController.php⇩

public function myfavorites($id) { $data = []; $user = User::find($id); $theme = Theme::find($id); $myfavorites = $user->myfavorites()->orderBy('created_at', 'desc')->paginate(10); $favorite_counts = \DB::table('user_favorite') ->select(\DB::raw('favorite_id, count(*) as count')) ->groupBy('favorite_id') ->get(); $data = [ 'user' => $user, 'answers' => $myfavorites, 'theme' => $theme, ]; $data += $this->counts($user); return view('users.myfavorites', $data, [ 'favorite_counts' => $favorite_counts, ]); }

$favorite_countsで「答え」に対して何人「いいね」したかカウントしています。
VIEWで{{ $favorite_counts }}を記述すると、

answers.blade.php⇩(ul、div要素等は省いてます)

@if (count($answers) > 0)  @foreach ($answers as $answer) <?php $theme = $answer->theme; ?> <?php $user = $answer->user; ?> {{ $theme->shitsumon}} {{ $answer->kotae}}            @include('user_favorite.favorite_button', ['answer' => $answer]) {{ $favorite_counts }}  @endforeach {!! $answers->render() !!} @endif

[{"favorite_id":1,"count":2},{"favorite_id":2,"count":2},{"favorite_id":3,"count":1},{"favorite_id":4,"count":1},{"favorite_id":5,"count":1},{"favorite_id":6,"count":1}]
このような表示になります。

ここから、"count": の数字のみを取り出したいのですが方法がわからなくて困っています。

@foreachのすぐ下で

<?php $favorite_counts = $answer->id; ?>

としたり、いろいろ組んでみましたが、思うような結果が得られず投稿に至りました。

VIEW側でどのようにコードを組めばうまく表示されますでしょうか、ご教授いただきたいです。
よろしくおねがいします。

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

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

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

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

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

guest

回答2

0

単純に表示したい、というニーズにこたえるなら下記の通りにviewを変更してみて下さい。

html

1@foreach($favorite_counts as $value) 2 favoeite_id({{$value->favorite_id}})のカウントは{{$value->count}}です。 3@endforeach

結果、HTMLには

favoeite_id(1)のカウントは2です。 favoeite_id(2)のカウントは2です。 favoeite_id(3)のカウントは1です。 favoeite_id(4)のカウントは1です。 favoeite_id(5)のカウントは1です。

と表示されると思います。

ただ、

「答え」の横に、何人の人が「いいね」したのかカウント表示させたい

場合には、dyoshikawaさんが書いている様なテーブルを設けて、リレーションを組んであげると良いかと思いますが…

イメージ

answers

iduser_id(投稿者)theme_idkotae
111答え1
212答え2
321答え3

favorites

idanswer_iduser_id(イイネした人)
111
212
321

この関係を見ると、answersのid1番には、user_idが1と2の人が「イイネ」をしていて合計で2件のイイネが付いているとわかります。

あとは、answerモデルにhasmanyfavotitesをつけてあげれば、一覧の中でイイネの件数を簡単に出す事が出来るはず。
参考

投稿2018/07/24 06:58

編集2018/07/24 07:03
motuo

総合スコア3027

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

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

0

うーん、そもそもテーブル設計が間違っている気がします。

質問者様は中間テーブルとして user_favorite を作っていますが、userとfavorite(たぶん「いいね」のことですよね?)が多対多関係になるというのはちょっと考えにくいです。

「いいね」はユーザと答えの関係ということなのですよね。
それならば、ユーザと答えの中間テーブルを作り、それを「いいね」として扱うべきではないかと思います。
もしくは、ユーザといいねの1対多+答えといいねの1対多とするかですね。

http://ihatov08.hatenablog.com/entry/2016/02/26/184659

こちらの記事、Railsですが、参考になるかと思います。

投稿2018/07/24 06:48

編集2018/07/24 06:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問