1

I currently use Laravel 8 and I want to know how do I ignore unique validation when a user is updating their profile? If the user is updating every field except the pageName I don't want it to throw a vaildation error cause the user is already the owner of that pageName. I tried this code but it gives error: ErrorException Undefined variable: user

$request->validate([
    'image' => 'nullable|mimes:jpeg,jpg,png|max:100',
    'pageName' => 'nullable|alpha_dash|unique:users,littlelink_name'.$user->id,
    'pageColor' => 'nullable',
    'pageFontcolor' => 'nullable',
    'pageDescription' => 'nullable|regex:/^[\w.\- ]+$/i',
    'pagePixiv' => 'nullable|url',
    ]);

This is my controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

use Auth;
use DB;

use App\Models\User;
use App\Models\Button;
use App\Models\Link;


class UserController extends Controller
{

    //Statistics of the number of clicks and links 
    public function index()
    {
        $userId = Auth::user()->id;

        $littlelink_name = Auth::user()->littlelink_name;

        $links = Link::where('user_id', $userId)->select('link')->count();

        $clicks = Link::where('user_id', $userId)->sum('click_number');

        return view('studio/index', ['littlelink_name' => $littlelink_name, 'links' => $links, 'clicks' => $clicks]);
    }

    //Show littlelink page. example => http://127.0.0.1:8000/+admin
    public function littlelink(request $request)
    {
        $littlelink_name = $request->littlelink;
        $id = User::select('id')->where('littlelink_name', $littlelink_name)->value('id');

        if (empty($id)) {
            return abort(404);
        }
        
        $information = User::select('littlelink_name', 'littlelink_color', 'littlelink_fontcolor', 'littlelink_pixiv', 'littlelink_description')->where('id', $id)->get();
        
        $links = DB::table('links')->join('buttons', 'buttons.id', '=', 'links.button_id')->select('links.link', 'links.id', 'buttons.name')->where('user_id', $id)->orderBy('up_link', 'asc')->get();

        return view('littlelink', ['information' => $information, 'links' => $links, 'littlelink_name' => $littlelink_name]);
    }

    //Show buttons for add link
    public function showButtons()
    {
        $data['buttons'] = Button::select('name')->get();
        return view('studio/add-link', $data);
    }

    //Save add link
    public function addLink(request $request)
    {
        $request->validate([
            'link' => 'required|url',
            'button' => 'required'
        ]);

        $link = $request->link;
        $button = $request->button;

        $userId = Auth::user()->id;
        $buttonId = Button::select('id')->where('name' , $button)->value('id');

        $links = new Link;
        $links->link = $link;
        $links->user_id = $userId;
        $links->button_id = $buttonId;
        $links->save();

        return back()->with('message', 'Link Added');
    }

    //Count the number of clicks and redirect to link
    public function clickNumber(request $request)
    {
        $link = $request->link;
        $linkId = $request->id;

        if(empty($link && $linkId))
        {
            return abort(404);
        }

        Link::where('id', $linkId)->increment('click_number', 1);

        return redirect()->away($link);
    }
    
    //Show link, click number, up link in links page
    public function showLinks()
    {
        $userId = Auth::user()->id;
        
        $data['links'] = Link::select('id', 'link', 'click_number', 'up_link')->where('user_id', $userId)->orderBy('created_at', 'desc')->paginate(10);
        return view('studio/links', $data);
    }

    //Delete link
    public function deleteLink(request $request)
    {
        $linkId = $request->id;

        Link::where('id', $linkId)->delete();
        
        return back();
    }

    //Raise link on the littlelink page
    public function upLink(request $request)
    {
        $linkId = $request->id;
        $upLink = $request->up;

        if($upLink == 'yes'){
            $up = 'no';
        }elseif($upLink == 'no'){
            $up = 'yes';
        }

        Link::where('id', $linkId)->update(['up_link' => $up]);

        return back();
    }

    //Show link to edit
    public function showLink(request $request)
    {
        $linkId = $request->id;

        $link = Link::where('id', $linkId)->value('link');

        $buttons = Button::select('name')->get();
       
        return view('studio/edit-link', ['buttons' => $buttons, 'link' => $link, 'id' => $linkId]);

    }

    //Save edit link
    public function editLink(request $request)
    {
        $request->validate([
            'link' => 'required|url',
            'button' => 'required',
        ]);

        $link = $request->link;
        $button = $request->button;
        $linkId = $request->id;

        $buttonId = Button::select('id')->where('name' , $button)->value('id');

        Link::where('id', $linkId)->update(['link' => $link, 'button_id' => $buttonId]);

        return redirect('/studio/links');
    }

    //Show littlelinke page for edit
    public function showPage(request $request)
    {
        $userId = Auth::user()->id;

        $data['pages'] = User::where('id', $userId)->select('littlelink_name', 'littlelink_color', 'littlelink_fontcolor', 'littlelink_pixiv', 'littlelink_description')->get();

        return view('/studio/page', $data);
    }

    //Save littlelink page (name, description, logo)
    public function editPage(request $request)
    {
        
    $request->validate([
        'image' => 'nullable|mimes:jpeg,jpg,png|max:100',
        'pageName' => 'nullable|alpha_dash|unique:users,littlelink_name'.$user->id,
        'pageColor' => 'nullable',
        'pageFontcolor' => 'nullable',
        'pageDescription' => 'nullable|regex:/^[\w.\- ]+$/i',
        'pagePixiv' => 'nullable|url',
        ]);
        
        $userId = Auth::user()->id;
        $littlelink_name = Auth::user()->littlelink_name;

        $profilePhoto = $request->file('image');
        $pageName = $request->pageName;
        $pageColor = $request->pageColor;
        $pageFontcolor = $request->pageFontcolor;
        $pageDescription = $request->pageDescription;
        $pagePixiv = $request->pagePixiv;
        
        User::where('id', $userId)->update(['littlelink_name' => $pageName, 'littlelink_color' => $pageColor, 'littlelink_fontcolor' => $pageFontcolor, 'littlelink_pixiv' => $pagePixiv, 'littlelink_description' => $pageDescription]);

        if(!empty($profilePhoto)){
        $profilePhoto->move(public_path('/img'), $littlelink_name . ".png");
        }

        return back()->with('message', 'Saved');
    }

    //Show user (name, email, password)
    public function showProfile()
    {
        $userId = Auth::user()->id;

        $data['profile'] = User::where('id', $userId)->select('name', 'email')->get();

        return view('/studio/profile', $data);
    }

    //Save user (name, email, password)
    public function editProfile(request $request)
    {
        $request->validate([
            'name' => 'required|unique:users',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8',
        ]);

        $userId = Auth::user()->id;

        $name = $request->name;
        $email = $request->email;
        $password = Hash::make($request->password);

        User::where('id', $userId)->update(['name' => $name, 'email' => $email, 'password' => $password]);

        return back();
    }
}

Anyone know how to fix this?

2 Answers 2

2

You can change your code to the following

$userId = Auth::user()->id;
$request->validate([
    'image' => 'nullable|mimes:jpeg,jpg,png|max:100',
    'pageName' => 'nullable|alpha_dash|unique:users,littlelink_name,'.$userId,
    'pageColor' => 'nullable',
    'pageFontcolor' => 'nullable',
    'pageDescription' => 'nullable|regex:/^[\w.\- ]+$/i',
    'pagePixiv' => 'nullable|url',
]);
Sign up to request clarification or add additional context in comments.

Comments

1

you can use the Rule object to make that validation:

 'pageName' => ['nullable','alpha_dash', Rule::unique('users','littlelink_name')->ignore($user->id)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.