سلام دوستان..
یه جدول دارم به اسم پکیج ها که هر یوزر میتونه چندتا پکیج توش درست کنه..
چجوری توی اعتبار سنجی بگم که یه پکیج رو: اگر توی جدول از قبل موجود هست ولی یه نفر دیگه اضافه کرده، عیب نداره یوزر بتونه اضافه کنه ولی اگر خودش با ای دی خودش این پکیج رو قبلا اضافه کرده تکراری برای این یوزر ذخیره نشه؟
متوجه شدید؟
ده تا یوزر میتونن اسم پکیج مشابه سیو کنن اما هر یوزر یه اسم رو که قبلا سیو کرده نمیتونه مجددا تکراری سیو کنه..
ممنون میشم راهنماییم کنید..
<?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 'شما قبلا اقدام به ثبت این پکیج نموده اید.';
}
}
این میشه اعتبار سنجی سفارشی
یک جدول به نام پکیج ها بساز ، و جدول پکیچ ها رابطه Many to Many با جدول کاربران داشته باشند . هر کاربر بی نهایت پکیج و هر پکیج بی نهایت کاربر دارد.
حالا قبل از ذخیره پکیج بررسی بکن آیا پکیچی در جدول پکیج ها وجود دارد که یکی از کاربران متصل شده به پکیج کاربر مورد نظر شما باشد . برای این کار هم می تونی از whereHas استفاده بکنی
$Q = "Title";
Package::whereHas('Users' , function($Query) user($user) {
return $Query->whereId($user->id);
})->where('title' , 'LIKE', "%{$Q}%" );
من گفتم مشابه شما می تونی برابر در نظر بگیر اگر موجود نبود پکیج ایجاد شود .
ممنونم
دنبال یه راهی هستم با سیستم پیشفرض اعتبار سنجی لاراول اینو بشه چک کرد نه با کد نویسی جداگونه
توی جدول packages
سلام بهترین کار ساختن یه اعتبار سنجی سفارشی با دستور
php artisan make:rule PakageRule
هست
<?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 'شما قبلا اقدام به ثبت این پکیج نموده اید.';
}
}
این میشه اعتبار سنجی سفارشی
داخل کنترلر مورد نظر برای اعتبار سنجی ابتدا کلاس مربوطه رو use کنید
use App\Rules\PackageRule;
بعد در خط اعتبار سنجی این طوری اعتبار سنجی کنید
$this->validate(request(), [
'title' => [ 'required', new PackageRule() ]
]);
سلام یک موضوعی رو دیشب جا انداختم و اون این هست که در فایل اعتبار سنجی سفارشی قبل کوییری بایستی سه تا علامت !!! قرار بدیم
!!! Package::where(['title' => $value, 'user_id' => $user->id])->first();
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟