سلام دوستان..
یه جدول دارم به اسم پکیج ها که هر یوزر میتونه چندتا پکیج توش درست کنه..
چجوری توی اعتبار سنجی بگم که یه پکیج رو: اگر توی جدول از قبل موجود هست ولی یه نفر دیگه اضافه کرده، عیب نداره یوزر بتونه اضافه کنه ولی اگر خودش با ای دی خودش این پکیج رو قبلا اضافه کرده تکراری برای این یوزر ذخیره نشه؟
متوجه شدید؟
ده تا یوزر میتونن اسم پکیج مشابه سیو کنن اما هر یوزر یه اسم رو که قبلا سیو کرده نمیتونه مجددا تکراری سیو کنه..
ممنون میشم راهنماییم کنید..
<?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
شاید پاسخ شما همینجا باشد