JBolouri
4 سال پیش توسط JBolouri مطرح شد
9 پاسخ

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

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

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

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

متوجه شدید؟

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

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


ثبت پرسش جدید
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
2
<?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 4 سال پیش مطرح شد
1

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

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

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


JBolouri
@javadbolouri72 4 سال پیش مطرح شد
0

@need4down

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

توی جدول packages


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
2

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

php artisan make:rule PakageRule

هست


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
2
<?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 'شما قبلا اقدام به ثبت این پکیج نموده اید.';
    }
}

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


JBolouri
@javadbolouri72 4 سال پیش مطرح شد
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
2

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

use App\Rules\PackageRule; 

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

 $this->validate(request(), [
            'title' => [ 'required', new PackageRule() ]
        ]);

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
1

خواهش می کنم


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
1

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

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

JBolouri
@javadbolouri72 4 سال پیش مطرح شد

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

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