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

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

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

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

Laravel

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

PHP

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

4162閲覧

laravel ログインしているユーザーでフォローしているユーザーの数、フォローされているユーザーの数をcountを使って取得したい。

hina0823

総合スコア15

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

Laravel

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

PHP

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/10/13 12:52

前提・実現したいこと

以前も質問させていただいたことですが、原因がいまいち掴めなかった為、再度質問させていただきます。
実現したいこととしては、ログインしているユーザーでフォローしているユーザーの数、フォローされているユーザーの数をcountを使って取得したいと考えています。

該当ソースコード

FollowsController

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Support\Facades\Auth; 7use Illuminate\Support\Facades\DB; 8use App\User; 9use App\Post; 10use App\Follow; 11 12class FollowsController extends Controller 13{ 14 public function show(User $user, Follow $follow) 15 { 16 $login_user = auth()->user(); 17 $is_following = $login_user->isFollowing($user->id); 18 $is_followed = $login_user->isFollowed($user->id); 19 $follow_count = $follow->getFollowCount($user->id); 20 $follower_count = $follow->getFollowerCount($user->id); 21 22 return view('users.show', [ 23 'user' => $user, 24 'is_following' => $is_following, 25 'is_followed' => $is_followed, 26 'follow_count' => $follow_count, 27 'follower_count' => $follower_count 28 ]); 29 } 30}

Followモデル

php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Follow extends Model 8{ 9 10 protected $fillable = [ 11 'following_id', 'followed_id' 12 ]; 13 14 public function getFollowCount($user_id) 15 { 16 return $this->where('following_id', $user_id)->count(); 17 } 18 19 public function getFollowerCount($user_id) 20 { 21 return $this->where('followed_id', $user_id)->count(); 22 } 23}

Userモデル

php

1<?php 2 3namespace App; 4 5use Illuminate\Notifications\Notifiable; 6use Illuminate\Foundation\Auth\User as Authenticatable; 7 8class User extends Authenticatable 9{ 10 use Notifiable; 11 12 /** 13 * The attributes that are mass assignable. 14 * 15 * @var array 16 */ 17 protected $fillable = [ 18 'username', 'mail', 'password', 19 ]; 20 21 /** 22 * The attributes that should be hidden for arrays. 23 * 24 * @var array 25 */ 26 protected $hidden = [ 27 'password', 'remember_token', 28 ]; 29 30 public function follow($user_id) 31 { 32 return $this->follows()->attach($user_id); 33 } 34 35 public function unfollow($user_id) 36 { 37 return $this->follows()->detach($user_id); 38 } 39 40 public function isFollowing($user_id) 41 { 42 return (boolean) $this->follows()->where('followed_id', $user_id)->exists(); 43 } 44 45 public function isFollowed($user_id) 46 { 47 return (boolean) $this->followers()->where('following_id', $user_id)->exists(); 48 } 49} 50

followsテーブル

php

1<?php 2 3use Illuminate\Support\Facades\Schema; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Database\Migrations\Migration; 6 7class CreateFollowsTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('follows', function (Blueprint $table) 17 { 18 $table->increments('id')->autoIncrement(); 19 $table->integer('following_id')->unsigned(); 20 $table->integer('followed_id')->unsigned(); 21 $table->timestamp('created_at')->useCurrent(); 22 23 $table->index('following_id'); 24 $table->index('followed_id'); 25 26 $table->unique(['following_id','followed_id']); 27 }); 28 } 29 30 31 32 /** 33 * Reverse the migrations. 34 * 35 * @return void 36 */ 37 public function down() 38 { 39 Schema::dropIfExists('follows'); 40 } 41} 42

usersテーブル

php

1<?php 2 3use Illuminate\Support\Facades\Schema; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Database\Migrations\Migration; 6 7class CreateUsersTable extends Migration 8{ 9 /** 10 * Run the migrations. 11 * 12 * @return void 13 */ 14 public function up() 15 { 16 Schema::create('users', function (Blueprint $table) 17 { 18 $table->increments('id')->autoIncrement(); 19 $table->string('username',255); 20 $table->string('mail',255); 21 $table->string('password',255); 22 $table->string('bio',400)->nullable(); 23 $table->string('images',255)->default('dawn.png')->nullable(); 24 $table->timestamps(); 25 }); 26 } 27 28 /** 29 * Reverse the migrations. 30 * 31 * @return void 32 */ 33 public function down() 34 { 35 Schema::dropIfExists('users'); 36 } 37} 38

ルート

php

1Route::group(['middleware' => 'auth'], function() { 2Route::get('/show','FollowsController@show'); 3});

試したこと

Followモデルを

php

1public function getFollowCount($user_id) 2 { 3 return $this->where('following_id', '<>', $user_id)->count(); 4 } 5 6 public function getFollowerCount($user_id) 7 { 8 return $this->where('followed_id', '<>', $user_id)->count(); 9 }

このようにしたところ、データベース上ですべてのフォローしているユーザーの数、フォローされているユーザーの数は取得できました。

バージョン

laravel 5.5.48
php 7.4.5
homestead

ご教授の程、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHP

1$is_following = $login_user->isFollowing($user->id); 2$is_followed = $login_user->isFollowed($user->id); 3$follow_count = $follow->getFollowCount($user->id); 4$follower_count = $follow->getFollowerCount($user->id);

$user->idがnullになってしまっているかな。

$user->idには自動でログインしているユーザのIDが格納されたりはしないはずなので、
$login_user->idを使えばよいです。

PHP

1$is_following = $login_user->isFollowing($login_user->id); 2$is_followed = $login_user->isFollowed($login_user->id); 3$follow_count = $follow->getFollowCount($login_user->id); 4$follower_count = $follow->getFollowerCount($login_user->id);

投稿2020/10/13 13:11

whiro

総合スコア31

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

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

hina0823

2020/10/13 13:27

ご回答ありがとうございます。 いただいた記述を試したところ、無事表示されました。 ずっとデータベースに問題があると思い、モデルにしか目が行っていませんでした。 $login_user = auth()->user(); でログインしているユーザーを取得しているのは理解していましたが、$user->id の部分は盲点でした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問