Как передать идентификатор для запроса формы в Laravel

#laravel #eloquent

#laravel #красноречивый

Вопрос:

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

 Route::resource('ganado/engorde', 'GanadoController')->middleware('auth');
  

В моем контроллере обновления:

 public function update(GanadoEditFormRequest $request, $id)
{
    $bovino = Ganado::findOrFail($id);
    ...
}
  

Это мой запрос формы:

 public function rules()
{
    return [
        'codigo_ganado' =>  ['required', 

            Rule::unique('ganado')
                   ->ignore($this->id, 'id_ganado')
                   ->where('lote_actual', $this->lote_actual)
                   ->where('ganaderia', $this->ganaderia)
            ],
    ];
}
  

Я попытался передать напрямую id = «85», просто чтобы проверить, работает ли эта «игнорируемая» вещь, и я тоже получаю и ошибку =

id <> 85 вместо id = 85.

Как я могу правильно игнорировать текущую запись обновления?

Редактировать:

Это моя таблица «Ganado»:

введите описание изображения здесь

Комментарии:

1. вы использовали что-то подобное url.com/ganado/engorde/85 для поиска своего элемента?

2. да, мой контроллер обновления работает нормально, вот пример: http://ganaderia.test/ganado/engorde/85/edit @Atlas-Pio

Ответ №1:

Поскольку я не знаю, как выглядит ваш код, возможно, вы захотите попробовать это :

 public function rules()
{
      $id = $this->route('id')
      // Or
      $id = $this->route('engorde')  
    return [
        'codigo_ganado' =>  ['required', 

            Rule::unique('ganado')
                   ->ignore($id, 'id_ganado')
                   ->where('lote_actual', $this->lote_actual)
                   ->where('ganaderia', $this->ganaderia)
            ],
    ];
}
  

Итак, на основе вашей Ganado таблицы вашей основной является таблица id_ganado , которая laravel всегда распознает таблицы с id в качестве основной таблицы, поэтому вам может потребоваться добавить

 protected $primaryKey = 'id_ganado';
  

Редактировать: Обновить до ignore($id.',id_ganado')

Комментарии:

1. хорошо, второй работает, и я получаю идентификатор, но все еще получаю уникальное сообщение о проверке, просто чтобы проверить, получаю ли я идентификатор, я удалил ‘id_ganado’, чтобы получить ошибку sql, что столбец id неизвестен, и здесь я могу проверить, что я получаю идентификатор, почему все еще не работает, чтобы игнорировать текущую запись?

2. Вот ошибка, о которой я говорю: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select count(*) as aggregate from ganado where codigo_ganado = 0604 and id <> 85 and lote_actual = Lote-1 and ganaderia = VS) просто чтобы проверить, получаю ли я правильный идентификатор

3. да, вот почему я задал этот вопрос позже в вопросе, потому что я пытался передать идентификатор напрямую, просто чтобы проверить, работает ли он, и он не работал. Уже обновил вопрос с таблицей.

4. Я уже определил первичный ключ подобным образом в моей модели @Atlas-Pio

5. ммм, ты имеешь в виду с -> после слова игнорировать? потому что это неправильный способ выразить это