DropDown: проверка 2 предметов только на 3 - PullRequest
1 голос
/ 03 июля 2019

У меня есть 2 таблицы, первая - Students с 3 полями (имя, имя, fk_diploma). Затем моя вторая таблица называется Diplomas, и есть 1 поле с именем (type_diploma).

Для информации у меня есть 3 значения в моем поле type_diploma:

1) DiplomaA
2) DiplomaB
3) DiplomaC

В моей системе проверки я хочу, чтобы DiplomaA или DiplomaB были проверены, но не DiplomaC, у меня должно быть сообщение об ошибке.

Например: * «Извините, у вас нет навыков для получения дипломаC.»

У вас есть идея, как я могу это сделать?

public function store(Request $request)
    {    
      $diploma = Diploma::select('type_diploma')->where('id',$request->fk_diploma)->get();
      if($diploma->type_diploma != 'DiplomaC')  
      {
      $request->validate([
            'name' => 'required|min:3',
            'firstname' => 'required|min:2|max:200',
            'fk_diploma' => 'required'
        ]);
       }

       $exists = Student::where('name', $request->get('name'))->where('firstname', $request->get('firstname'))->where('fk_diploma', $request->get('fk_diploma'))->count();

       if (!$exists){
            Student::create($request->all());
            return redirect()->route('students.index')
                ->with('success', 'new data created successfully');
        }

        else{
            return redirect()->route('students.index')
                ->with('error', 'duplicate');

        }   

    }

Моя модель Диплом

class Diploma extends Model
{
    protected  $fillable = ['type_diploma'];


    public function diplomas(){

        return $this->hasMany('App\Student', 'fk_diploma');
    }


}

Модель Студент

class Student extends Model
{
    protected  $fillable = ['name', 'firstname', 'fk_diploma'];


    public function diplomas(){

        return $this->belongsTo('App\Diploma' , 'fk_diploma');
    }

enter image description here enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Это не лучший способ сделать это, но это единственный, о котором я мог подумать сейчас:

1) измените тип вашего запроса на public function store(Request $request)

2) Сделайте это в своей функции:

public function store(dateRequest $request)
{    
      $diploma = Diploma::select('type_diploma')->where('id',$request->fk_diploma)->get();
      if($diploma->type_diploma != 'DiplomaA' && $diploma->type_diploma != 'DiplomaB')  
      {
      $request->validate([
            'name' => 'required|min:3',
            'firstname' => 'required|min:2|max:200',
            'fk_diploma' => 'required'
        ]);
       }

       $exists = Student::where('name', $request->get('name'))->where('firstname', $request->get('firstname'))->where('fk_diploma', $request->get('fk_diploma'))->count();

       if (!$exists){
            Student::create($request->all());
            return redirect()->route('students.index')
                ->with('success', 'new data created successfully');
        }

        else{
            return redirect()->route('students.index')
                ->with('error', 'duplicate');

        }   

}
0 голосов
/ 03 июля 2019

Это будет работать для вас:

$this->validate($request, [
    'fk_diploma' => 'required|not_in:XXX',
]);

XXX - идентификатор диплома, который вы не хотите принимать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...