#起きてる問題
インスタのいいね機能のような物を実装中で、既に「いいね!」しているかを判定するis_favorite()
関数をUser.php
に定義したのだが、そのコードが読み込まれる際に以下のエラーが出力される
#期待している挙動
このエラーが出ないようにする
#試したこと
エラーが出ている一文が@if ($user->is_favorite($post->id))
なので$user
に値が入ってるか確認(入っていた)
is_favorite()関数が適切な場所に定義されているか(されていた)
#エラーメッセージ
Call to undefined method Laravel\Socialite\Two\User::is_favorite() (View: /var/www/resources/views/index.blade.php)
#該当のコード
index.blade.php
<h1>ホーム画面</h1> <!-- 画像とコメントをすべて表示--> @foreach($posts as $post) <div class="card-header text-center"> <img src= {{ Storage::disk('s3')->url($post->image_file_name) }} alt="" width=250px height=250px></a> </div> <div class="card-body p-1"> <span class="card-title">{{link_to('/profile',$post->user)}}<br>{{ $post->image_title }}</span> <!-- デバック(userはうまく入っていた)--> {{ dd($user) }} @if ($post->user!==$username) @if ($user->is_favorite($post->id)) {!! Form::open(['route' => ['favorites.unfavorite', $post->id], 'method' => 'delete']) !!} {!! Form::submit('いいね!を外す', ['class' => "button btn btn-warning"]) !!} {!! Form::close() !!} @else {!! Form::open(['route' => ['favorites.favorite', $post->id]]) !!} {!! Form::submit('いいね!を付ける', ['class' => "button btn btn-success"]) !!} {!! Form::close() !!} @endif @endif @if ($post->user===$username) <form method="post" action="/delete/{{$post->id}}"> {{ csrf_field() }} <input type="submit" value="削除"> </form> @endif </div> @endforeach {{ $posts->links() }}
User.php
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Socialite\Two\User; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function articles(){ return $this->hasMany('App\Models\Article'); } public function post(){ return $this->hasMany('App\Models\Post'); } public function favorites() { return $this->belongsToMany(Post::class, 'favorites', 'user_id', 'post_id')->withTimestamps(); } public function favorite($postId) { $exist = $this->is_favorite($postId); if($exist){ return false; }else{ $this->favorites()->attach($postId); return true; } } public function unfavorite($postId) { $exist = $this->is_favorite($postId); if($exist){ $this->favorites()->detach($postId); return true; }else{ return false; } } public function is_favorite($postId) { return $this->favorites()->where('post_id',$postId)->exists(); } }