Почему laravel/eloquent не может найти определенную таблицу?

Я пытаюсь получить некоторые данные из таблицы под названием «категория», но laravel бросает

"SQLSTATE[42S02]: Base table or view not found" error.

Я пробовал с другими именами таблиц, такими как "Компания", и все работает отлично. Обе эти таблицы существуют, но ни одна из них не может быть найдена с тем же кодом.

Это вызывает ошибку:

public static function getCategories()
    {
        $categories = [];

        $cat = DB::table('category')->get();
        if (isset($cat)){
            foreach ($cat as $category_name){
                array_push($categories, $category_name);
            }
            return json_encode($categories);
        }
        return null;
    }

Это работает, как и ожидалось (тот же код, за исключением строки имени таблицы):

public static function getCategories()
    {
        $categories = [];

        $cat = DB::table('company')->get(); //table name changed
        if (isset($cat)){
            foreach ($cat as $category_name){
                array_push($categories, $category_name);
            }
            return json_encode($categories);
        }
        return null;
    }

Единственная разница между этими двумя таблицами заключается в сортировке таблиц:
компания: utf8_general_ci
категория: utf8mb4_swedish_ci

проверьте имя вашей таблицы

Akash Kumar Verma 04.04.2019 11:25

хит композитор дамп-автозагрузка

Akash Kumar Verma 04.04.2019 11:26

Пожалуйста, покажите код модели вашей категории

Lim Kean Phang 04.04.2019 11:26

Обе таблицы существуют в базе данных: картина @AkashKumarVerma

Vili Manninen 04.04.2019 11:30

Я не использую модель ни для одной из этих таблиц, просто ищу прямо из БД с именем таблицы @LimKeanPhang

Vili Manninen 04.04.2019 11:32

Вы должны создать модель и вставить защищенное место $table = 'category'; таким образом вы сможете выполнить свой запрос. Я предполагаю, что у вас есть имя таблицы, похожее на категорию

Lim Kean Phang 04.04.2019 11:34

'composer dump-autoload' на меня не повлиял. @АкашКумарВерма

Vili Manninen 04.04.2019 11:35

можешь показать мне полную ошибку

Akash Kumar Verma 04.04.2019 11:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
8
440
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Создайте модель, если у вас ее нет. Добавьте следующее в вашу модель категории

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'category';
}

Контроллер

public static function getCategories()
{
    $categories = [];

    $cat = Category::all();
    if (isset($cat)){
        foreach ($cat as $category_name){
            array_push($categories, $category_name);
        }
        return json_encode($categories);
    }
    return null;
}

В настоящее время вы используете Query Builder, попробуйте использовать красноречивый способ.

Не действует на меня, я получаю ту же ошибку. сообщение об ошибке говорит мне, что оно ищет правильную таблицу из правильной базы данных. картина Полное сообщение об ошибке: «SQLSTATE[42S02]: базовая таблица или представление не найдено: 1146 Таблица XXXX.category не существует (SQL: выберите * из category)» XXXX — это имя базы данных, здесь нет опечаток или чего-либо еще, другие таблицы находятся в той же базе данных. Когда я запускаю команду sql (выберите * из category) для базы данных, она возвращает данные правильно

Vili Manninen 04.04.2019 11:52

Хммм.. Попробуйте обновленный подход к ответу. Также проверьте env на подключение к базе данных.

Lim Kean Phang 04.04.2019 12:00

php artisan config:clear , php artisan cache:clear , php artisan view:clear

Lim Kean Phang 04.04.2019 12:02

«php artisan config:clear , php artisan cache:clear , php artisan view:clear» на меня не повлияло, я все равно получаю ту же ошибку.

Vili Manninen 04.04.2019 12:09

Да, теперь у меня есть public static function getCategories() { $categories = []; $cat = Category::all(); if (isset($cat)){ foreach ($cat as $category_name){ array_push($categories, $category_name); } return json_encode($categories); } return null; } и модель категории: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Category extends Model { protected $table = 'category'; } @LimKeanPhang

Vili Manninen 04.04.2019 12:13

Да, все та же ошибка: «SQLSTATE [42S02]: базовая таблица или представление не найдено: 1146 Таблица« XXXX.category »не существует (SQL: выберите * из category

Vili Manninen 04.04.2019 12:16

Вы добавили приложение/модель/категорию? наверху

Lim Kean Phang 04.04.2019 12:19

Вы когда-нибудь переименовывали или меняли файл миграции? :O Странно для этой ошибки..

Lim Kean Phang 04.04.2019 12:28

Хм, я не думаю, что там есть что-то полезное. Я не использую drupal, и я могу найти таблицу категорий с помощью mysql workbench, чистый запрос sql pdo из другого места... @LimKeanPhang

Vili Manninen 04.04.2019 12:29

Проверьте свой файл миграции на категорию и посмотрите, не пошло ли что-то не так внутри. Это последнее устранение неполадок, о котором я мог подумать.

Lim Kean Phang 04.04.2019 12:32

База данных была создана до того, как я начал этот проект, и я вообще не трогал структуру, только добавил некоторые данные в другие таблицы. Поэтому я не использую миграции laravel.

Vili Manninen 04.04.2019 12:33
Ответ принят как подходящий

Хорошо, я обнаружил, что у нас есть два отдельных сервера баз данных с идентичными данными почти в них. У обоих были базы данных и таблицы с одинаковыми именами, но в одном отсутствовала таблица категорий. Конечно, я все-таки подключился не к тому серверу из laravel.

Вкратце: простая ошибка пользователя в конфигурации.

Вот почему я советую вам проверить соединение в комментариях ранее. Думаю, я прав? Ты пропустил меня ??

Lim Kean Phang 04.04.2019 16:35

Да, у меня была неверная информация о сервере. Для меня конфигурация выглядела нормально, и она была правильно настроена для подключения к серверу. Я мысль, чтобы быть правильным. Мы оба были правы?, хорошие советы!

Vili Manninen 05.04.2019 10:50

Другие вопросы по теме