راکت
حل شده

اعتبار سنجی مقدار تکراری داخل بانک بر مبنای هر یوزر آی دی

9 پاسخ

سلام دوستان..

یه جدول دارم به اسم پکیج ها که هر یوزر میتونه چندتا پکیج توش درست کنه..

چجوری توی اعتبار سنجی بگم که یه پکیج رو: اگر توی جدول از قبل موجود هست ولی یه نفر دیگه اضافه کرده، عیب نداره یوزر بتونه اضافه کنه ولی اگر خودش با ای دی خودش این پکیج رو قبلا اضافه کرده تکراری برای این یوزر ذخیره نشه؟

متوجه شدید؟

ده تا یوزر میتونن اسم پکیج مشابه سیو کنن اما هر یوزر یه اسم رو که قبلا سیو کرده نمیتونه مجددا تکراری سیو کنه..

ممنون میشم راهنماییم کنید..

ثبت پرسش جدید

پاسخ‌ها

9
حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

بهترین پاسخ
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Http;

class PackageRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {

        $user = auth()->user()->id;

        return !! Package::where(['title' => $value, 'user_id' => $user->id])->first(); 

    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'شما قبلا اقدام به ثبت این پکیج نموده اید.';
    }
}

این میشه اعتبار سنجی سفارشی

امیر حسین
امیر حسین
@need4down

یک جدول به نام پکیج ها بساز ، و جدول پکیچ ها رابطه Many to Many با جدول کاربران داشته باشند . هر کاربر بی نهایت پکیج و هر پکیج بی نهایت کاربر دارد.
حالا قبل از ذخیره پکیج بررسی بکن آیا پکیچی در جدول پکیج ها وجود دارد که یکی از کاربران متصل شده به پکیج کاربر مورد نظر شما باشد . برای این کار هم می تونی از whereHas استفاده بکنی

$Q = "Title";
Package::whereHas('Users' , function($Query) user($user) {
 return $Query->whereId($user->id);
})->where('title' , 'LIKE', "%{$Q}%" );

من گفتم مشابه شما می تونی برابر در نظر بگیر اگر موجود نبود پکیج ایجاد شود .

JBolouri
JBolouri
@javadbolouri72

@need4down

ممنونم
دنبال یه راهی هستم با سیستم پیشفرض اعتبار سنجی لاراول اینو بشه چک کرد نه با کد نویسی جداگونه

توی جدول packages

شاید پاسخ شما همین‌جا باشد

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلام بهترین کار ساختن یه اعتبار سنجی سفارشی با دستور

php artisan make:rule PakageRule

هست

JBolouri
JBolouri
@javadbolouri72
حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

داخل کنترلر مورد نظر برای اعتبار سنجی ابتدا کلاس مربوطه رو use کنید

use App\Rules\PackageRule; 

بعد در خط اعتبار سنجی این طوری اعتبار سنجی کنید

 $this->validate(request(), [
            'title' => [ 'required', new PackageRule() ]
        ]);
حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

خواهش می کنم

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلام یک موضوعی رو دیشب جا انداختم و اون این هست که در فایل اعتبار سنجی سفارشی قبل کوییری بایستی سه تا علامت !!! قرار بدیم

!!! Package::where(['title' => $value, 'user_id' => $user->id])->first();
JBolouri
JBolouri
@javadbolouri72

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام