Laravel walidacja unique dla dwóch pól

Odpowiedz Nowy wątek
2018-01-19 13:28
0

mam np. taką migracje

Schema::create('configurations', function (Blueprint $table) {
            $table->increments('id');
            $table->date('date_from');
            $table->integer('race_id');
            $table->timestamps();
        });

i takie rule

    public function rules()
    {
        return [
            'race_id'   => 'required|not_in:0',
            'date_from' => 'required|date|unique:configurations,date_from,NULL,race_id',
        ];
    }

próbowałem też w ten sposób

    public function rules(ConfigurationRequest $configurationRequest)
    {
        return [
            'race_id'   => 'required|not_in:0',
            'date_from' => 'required|date|unique:configurations,date_from,NULL,id,race_id,'.$configurationRequest->race_id
        ];
    }

potrzebuję walidować jakby w parze, nie pozwolić na dodanie rekordu w tej samej dacie z tym samym race_id
Powyższe, wygooglane stąd https://laravel.io/forum/11-03-2015-l[...]-columns-for-unique-relations, nie działa.
Czy jest taka możliwość out of the box?

edytowany 2x, ostatnio: john_doe, 2018-01-19 13:49

Pozostało 580 znaków

2018-01-19 14:19
0

Dla validacji powinno pomóc to Rule::unique('pole')->where(...)
Natomiast w bazie skoro te pola mają sie nigdy nie powtórzyć w takiej parze to najlepiej jakby klucz główny to nie było id tylko te 2 pola razem.

Pozostało 580 znaków

2018-01-19 14:31
0

wiesz, na bazie można założyć też Constrainty.
Chodzi mi o walidację bardziej. Nie rozumiem jak użyć Rule:unique

metoda unique przyjmuję nazwę tabeli i kolumnę

    public static function unique($table, $column = 'NULL')
    {
        return new Rules\Unique($table, $column);
    }

where

    public function where($column, $value = null)
    {
        if (is_array($value)) {
            return $this->whereIn($column, $value);
        }

        if ($column instanceof Closure) {
            return $this->using($column);
        }

        $this->wheres[] = compact('column', 'value');

        return $this;
    }

dałem tak, nie działa

    public function rules(ConfigurationRequest $configurationRequest)
    {
        return [
            'race_id'   => 'required|not_in:0',
            'date_from' => [
                Rule::unique('configurations', 'date_from')->where('race_id', $configurationRequest->race_id)
            ],
        ];
    }

nie wiem jak to zapisać

edytowany 3x, ostatnio: john_doe, 2018-01-19 14:36

Pozostało 580 znaków

2018-01-19 14:39
0
Rule::unique('race_id')->where('date_from', $this->input('date_from'));

Spróbuj, pokombinuj z wariacjami.

Pozostało 580 znaków

2018-01-19 14:57
0

wygląda na to, że coś takiego działa

    public function rules()
    {
        return [
            'race_id'   => 'required|not_in:0',
            'date_from' => [
                Rule::unique('configurations', 'date_from')->where('race_id', $this->input('race_id'))
            ],
        ];
    }

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0