laravel изменения пользовательских запросов sql таблица - PullRequest
0 голосов
/ 27 февраля 2020

Я сделал пользовательский запрос на проверку

    class StoreModule extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required|unique:posts|max:50',
            'period' => 'required|integer|min:1',
            'block' => 'required|integer|min:1', 
            'study_points' => 'required|integer|min:1', 
            'my_teacher_id' => 'required',
            'tags' => 'required', 
            'coordinator_id' => 'required', 
            'category' => 'required|max:50', 
            'deadline' => 'required'
        ];
    }
}

Однако, когда я применяю этот класс к своему контроллеру

public function store(StoreModule $request)
{
    $module = Module::create($request->all());
    $module->tags()->sync($request->tags);

    return redirect()->route('admin.index');
}

Я неожиданно получаю SQL -ошибку

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mydatabase.posts' doesn't exist

Когда я заменяю StoreModule, класс FormRequest расширяется обычным запросом, все работает нормально, и объект сохраняется в моей таблице mydatabase.modules.

Почему laravel вдруг ищет таблицу mydatabase.posts? Я уже пытался объявить public $table = 'modules'; в классе модели моего модуля

Любые советы или помощь приветствуются. Пожалуйста, спросите, если мне нужно предоставить более подробную информацию

1 Ответ

0 голосов
/ 27 февраля 2020

У меня была такая проблема, и я решил с помощью промежуточного программного обеспечения. Не может быть лучшим подходом, но решил проблему. Поскольку в проекте я использую другое соединение с БД, это промежуточное программное обеспечение оказывается под рукой:)

В вашем коде вы определили $ table с publi c, но должны быть защищены как:

protected $table = 'table name';

Возьмите этот кусок кода, это промежуточное программное обеспечение, которое я написал.

public function handle($request, Closure $next, $database)
{
    // check witch database connection to use
    switch ($database) {
        case 'lamimail':
            // Set the User Database Connection
            DB::setDefaultConnection('lamimail');
            // Reconnect
            DB::reconnect();
            break;
        case 'lamiapps':
            // Set the User Database Connection
            DB::setDefaultConnection('lamiapps');
            // Reconnect
            DB::reconnect();
            break;
        default:
            // default action
            abort(403, 'Não está autorizado a aceder ao recurso solicitado.');
            break;
    }
    // next request...
    return $next($request);
}

Вызовите его в функции или __construct:

$this->middleware('SetDatabaseConnection:lamimail');

Помните, что условие case в switch () - это имя соединения с БД, расположенной в config / database. php.

Надеюсь, это поможет.

...