Wednesday, February 28, 2018

Laravel Users follow - development

Laravel Users follow

I have this error

SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‘id’ in field list is ambiguous (SQL: select id, followers.user_id as pivot_user_id, followers.follows_id as pivot_follows_id, followers.created_at as pivot_created_at, followers.updated_at as pivot_updated_at from users inner join followers on users.id = followers.follows_id where followers.user_id = 1 and follows_id = 2 limit 1)

(View: /Users/harshitsingh/Documents/logos/resources/views/users/index.blade.php)
and this is my UsersController

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppUser;
use Image;
use Auth;
use Profile;
use AppPost;
use AppNotificationsUserFollowed;

class UsersController extends Controller
{
    public function index()
    {
        $users = User::where('id', '!=', auth()->user()->id)->get();
        return view('users.index', compact('users'));
    }

    public function profile(){
        return view('profile');
    }


    public function update_avatar(Request $request){

            // Handle the user upload of avatar
        if($request->hasFile('avatar')){
            $avatar = $request->file('avatar');
            $filename = time() . '.' . $avatar->getClientOriginalExtension();
            Image::make($avatar)
            ->resize(300, 300)
            ->save( public_path('/uploads/avatars/' . $filename ) 
        );

            $user = Auth::user();
            $user->avatar = $filename;
            $user->save();
        }

        return redirect('/');

    }

    public function follow(User $user)
    {
        $follower = auth()->user();
        if ($follower->id == $user->id) {
            return back()->withError("You can't follow yourself");
        }
        if(!$follower->isFollowing($user->id)) {
            $follower->follow($user->id);

            // sending a notification
            $user->notify(new UserFollowed($follower));

            return back()->withSuccess("You are now friends with {$user->name}");
        }
        return back()->withError("You are already following {$user->name}");
    }

    public function unfollow(User $user)
    {
        $follower = auth()->user();
        if($follower->isFollowing($user->id)) {
            $follower->unfollow($user->id);
            return back()->withSuccess("You are no longer friends with {$user->name}");
        }
        return back()->withError("You are not following {$user->name}");
    }

    public function notifications()
    {
        return auth()->user()->unreadNotifications()->limit(5)->get()->toArray();
    }


    public function show(Post $post, $id)
    {
        $user = User::findOrFail($id);
        return view('user.profile', compact('user'));
    }
}

I am trying user to user relationship
this is User Model
`

 public function followers() 
        {
            return $this->belongsToMany(self::class, 'followers', 'follows_id', 'user_id')
                        ->withTimestamps();
        }

        public function follows() 
        {
            return $this->belongsToMany(self::class, 'followers', 'user_id', 'follows_id')
                        ->withTimestamps();
        }

        public function follow($userId) 
        {
            $this->follows()->attach($userId);
            return $this;
        }

        public function unfollow($userId)
        {
            $this->follows()->detach($userId);
            return $this;
        }

        public function isFollowing($userId) 
        {
            return (boolean) $this->follows()->where('follows_id', $userId)->first(['id']);
        }

`



from Laravel Questions and Answers https://laravelquestions.com/php/laravel-users-follow/
via Lzo Media

No comments:

Post a Comment