Я создаю систему голосования на моем текущем сайте Laravel, и есть проблема, которую я просто не понимаю при использовании метода Laravel updateOrCreate().
Вот что я пытаюсь сделать:
$vote = Vote::updateOrCreate(
['thread_id' => $id, 'user_id' => Auth::id()],
['type' => $request->type]
);
Есть ли голосование с тем, что thread_id и user_id обновляют свое поле type, используя значение $request->type. Если нет, создайте новую запись. В любом случае, я получаю сообщение об ошибке Integrity constrait violation: 1048: 'user_id' cannot be null
Я что-то не так делаю с этим методом?
Это моя миграция модели Vote:
Schema::create('votes', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('thread_id')->unsigned();
$table->boolean('type');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('thread_id')->references('id')->on('threads')->onDelete('cascade');
});
Заранее спасибо и извините за мой плохой английский!
Да, это единственный способ попасть в режим голосования
@jcalonso На самом деле Auth::id() возвращает null. Это странная причина, по которой я вошел в систему. Вид, в котором находятся мои кнопки «за» / «дау-голос», защищен промежуточным программным обеспечением auth.
Что возвращает Auth::user()?
Он возвращает нули, как и Auth::id().
Я забыл кое-что важное, что могло вызвать эту проблему. Система голосов за / против реализована в компоненте Vue внутри resources/js/components. Я использую axios, чтобы опубликовать свой голос type, но ... Auth::user() должен работать внутри моего контроллера, не так ли?
Думаю, это зависит от того, где проходит ваш маршрут. Это маршрут API?
Да @Namoshek, axios работает с маршрутом API.
Ну вот и все. Я должен использовать маршрут web.php, а не маршрут api.php. Большое спасибо вам обоим!






Вы уверены, что прошли аутентификацию во время вызова
updateOrCreate?