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

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

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

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

Laravel

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

PHP

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

データベース設計

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

解決済

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

hina0823
hina0823

総合スコア0

COUNT

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

Laravel

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

PHP

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

データベース設計

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

1回答

0評価

0クリップ

80閲覧

投稿2020/10/13 12:52

前提・実現したいこと

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

該当ソースコード

FollowsController

php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use App\User; use App\Post; use App\Follow; class FollowsController extends Controller { public function show(User $user, Follow $follow) { $login_user = auth()->user(); $is_following = $login_user->isFollowing($user->id); $is_followed = $login_user->isFollowed($user->id); $follow_count = $follow->getFollowCount($user->id); $follower_count = $follow->getFollowerCount($user->id); return view('users.show', [ 'user' => $user, 'is_following' => $is_following, 'is_followed' => $is_followed, 'follow_count' => $follow_count, 'follower_count' => $follower_count ]); } }

Followモデル

php

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Follow extends Model { protected $fillable = [ 'following_id', 'followed_id' ]; public function getFollowCount($user_id) { return $this->where('following_id', $user_id)->count(); } public function getFollowerCount($user_id) { return $this->where('followed_id', $user_id)->count(); } }

Userモデル

php

<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'username', 'mail', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function follow($user_id) { return $this->follows()->attach($user_id); } public function unfollow($user_id) { return $this->follows()->detach($user_id); } public function isFollowing($user_id) { return (boolean) $this->follows()->where('followed_id', $user_id)->exists(); } public function isFollowed($user_id) { return (boolean) $this->followers()->where('following_id', $user_id)->exists(); } }

followsテーブル

php

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateFollowsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('follows', function (Blueprint $table) { $table->increments('id')->autoIncrement(); $table->integer('following_id')->unsigned(); $table->integer('followed_id')->unsigned(); $table->timestamp('created_at')->useCurrent(); $table->index('following_id'); $table->index('followed_id'); $table->unique(['following_id','followed_id']); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('follows'); } }

usersテーブル

php

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id')->autoIncrement(); $table->string('username',255); $table->string('mail',255); $table->string('password',255); $table->string('bio',400)->nullable(); $table->string('images',255)->default('dawn.png')->nullable(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }

ルート

php

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

試したこと

Followモデルを

php

public function getFollowCount($user_id) { return $this->where('following_id', '<>', $user_id)->count(); } public function getFollowerCount($user_id) { return $this->where('followed_id', '<>', $user_id)->count(); }

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

バージョン

laravel 5.5.48
php 7.4.5
homestead

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

COUNT

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

Laravel

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

PHP

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

データベース設計

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