Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
в env указана директория public?
FILESYSTEM_DISK=public
на рабочем сервере скинули кэш настроек?
php artisan config:clear
php artisan route:clear
Сижу разбираюсь с проблемой, но решить не могу.
Пробовал следующее:
1. Сделал полный откат до всех изменений которые вносил сегодня. Далее создал модели, миграции, контроллер шаблоны просто скопировал заново. Ошибка сохраняется
2. Добавил одну категорию в базу и сделал методы index, edit, update,
Результат:
index - вывел категорию
edit - подтянул данные и расставил в инпуты
update - не сохраняет данные, снова эта ошибка
3. В методах store, update закомментировал строки сохранения данных
Результат:
store - все равно продолжает отображать ошибку
update - редиректит на метод index
ниже приведу код всего этого безобразия
миграция
public function up()
{
Schema::create('booking_categories', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('link');
$table->integer('published')->default(0);
$table->timestamps();
});
}
Модель BookingCategory
class BookingCategory extends Model
{
use HasFactory;
protected $fillable = [
'title',
'link',
'published',
];
public function booking()
{
return $this->belongsTo(Booking::class);
}
}
контроллер
class BookingCategoryController extends Controller
{
public function index()
{
// $categories = BookingCategory::all();
// dd($categories);
return view('admin.booking.category.index', [
'categories' => BookingCategory::all(),
]);
}
public function create()
{
return view('admin.booking.category.create', []);
}
public function store(FormCategoryCreateRequest $request)
{
// BookingCategory::create($request->all());
return redirect()->route('admin.category.index');
}
public function show($id)
{
//
}
public function edit($id)
{
$category = BookingCategory::findOrFail($id);
return view('admin.booking.category.create', [
'category' => $category,
]);
}
public function update(FormCategoryCreateRequest $request, $id)
{
// $category = BookingCategory::findOrFail($id);
// $category->update();
return redirect(route('category.index'));
}
public function destroy($id)
{
//
}
}
Форма отвечает сразу за оба варианта, создание и изменение
<form method="POST" action="{{ isset($category) ? route('category.update', $category->id) : route('category.store') }}">
@csrf
@if(isset($category))
@method('PUT')
@endif
<div class="form-group">
<label for="title">Название категории</label>
<input type="text" name="title" id="title" value="{{ $category->title ?? '' }}" class="form-control @error('title') border-danger @enderror" id="title" placeholder="Название категории">
@error('title')
<p class="text-danger">{{ $message }}</p>
@enderror
</div>
<div class="form-group">
<label for="link">Символьный код</label>
<input type="text" name="link" id="link" value="{{ $category->link ?? '' }}" class="form-control @error('link') border-danger @enderror" id="title" placeholder="Символьный код">
@error('link')
<p class="text-danger">{{ $message }}</p>
@enderror
</div>
<div class="form-group">
<input type="hidden" name="activity" value="0" />
<input type="checkbox" name="published" value="1" id="published" data-bootstrap-switch data-off-color="danger" data-on-color="success" @if(isset($category)) {{ old('published', $category->published) !=1?: 'checked' }} @endif>
<label for="published">Опубликовать</label>
</div>
<div class="card-footer">
<button type="submit" class="btn btn-primary">{{ isset($category) ? "Изменить" : 'Добавить' }}</button>
</div>
</form>
route
Route::middleware(['role:admin|manager'])->prefix('admin_panel')->group(function () {
Route::get('/', [App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
Route::resource('/news', App\Http\Controllers\Admin\NewsController::class);
Route::resource('/booking/category', App\Http\Controllers\Admin\BookingCategoryController::class);
});
Всем привет!
Возникла такая ситуация что laravel обращается к несуществующей таблице.
Я создал модель с миграцией BookingCategory
Далее создал ресурсный контроллер и указал роут
Route::resource('/booking/category', App\Http\Controllers\Admin\BookingCategoryController::class);
в модели задал разрешенные поля для редактирования и настроил связку таблиц
protected $fillable = [
'title',
'link',
'published',
];
public function booking()
{
return $this->belongsTo(Booking::class);
}
в контроллере в методе store делаю запись в таблицу
BookingCategory::create($request->all());
return redirect()->route('admin.category.index');
В результате идет попытка сделать запись в таблицу category_bookins
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'category_bookins' doesn't exist
здесь следует пояснить почему таблицу показывает "category_bookins" хотя я создавал "booking_categories" и в базе именно эта таблица.
Дело в том что когда я столкнулся с данной ошибкой стал искать проблему и увидел что не совсем логично назвал модель и решил сделать откат миграций и создал модель заново + миграцию, контроллер заново создавать не стал и просто переименовал файл и подключил новую модель.
Но если смотреть на ошибку с прошлой моделью CategoryBooking, то сама ошибка точно такая же, можно заметить что при попытке сохранить данные из имени таблицы почему то удаляется буква "g"
Мое удивление стало еще больше когда я переименовал таблицу а ларавел делает обращение все равно к старой которой никогда и не было.
Подскажите пожалуйста в чем проблема?
то есть получается логика следующая. В path пишем id юзера от которого проходит регистрация + id юзера который проходит регистрацию?
так?
id parent_id path
-- --------- ----
1 null '1.'
2 1 '1.1.'
3 2 '1.2.'
пройти по связанным id надо. скрин я не просто так приложил. А чтобы наглядно было. В parent хранится значение id того человека по чей ссылке была регистрация
например по ссылке от id=1 прошла регистрация второго юзера, его parent=1
потом от id=2 прошла регистрация третьего юзера, его paren=2
а юзер c id=1 должен видеть всех их тк цепочка началась от его id
Доброго времени суток!
Подскажите пожалуйста как узнать количество записей в цикле или запросом сразу можно как то определить.
Есть таблица users примерно такого вида
id
parent - хранить id и мне надо пройти по всем записям где id=3 потом взять id где равен 3 и пройти дальше.
Пример:
на скрине таблица http://joxi.ru/12M08Z6CgZ3dqm если брать пример где paren=3
получится запрос
User::where('parent', '=', Auth::user()->id)->count();
Сейчас надо от этих записей пройти дальше и в результате выдать общее количество
Приветствую!
что я только уже не пробовал делать:( Есть форма которую отправляю ajax с отправкой нет проблем но вот результат валидации всегда проходит.
Делаю в имени ошибку а он говорит что все норм.
Что с $validation->fails() не так? и еще как потом вернуть ошибку обратно?
Извиняюсь!!! Регулярка ошибочнаая! Столько времени потратил, а тут такое. Но втрой вопрос актуален
$namePattern = '/[а-яА-Я]+/';
$rules = [
'name' => ['required', 'string', 'min:3', 'regex:' . $namePattern],
];
$messages = [
'name.regex' => 'Не корректное имя',
];
$validation = Validator::make($req->all('name'), $rules, $messages);
if($validation->fails())
{
$data = [
'result' => 'err',
];
return json_encode($data);
}else{
$data = [
'result' => 'ok',
];
return json_encode($data);
}
В шестой версии нашел инфу только или глазки ибобо )))
Вопрос решен так
return [
'old_password' => ['required', 'password'],
'password' => ['required', 'min:8', 'confirmed'],
'password_confirmation' => ['required', 'same:password'],
];
в целях безопасности пароли не хранятся в БД! хранится некая вычисленная от пароля величина. поэтому сравнивать пароль с ней буквально нельзя. пользуйся методами из документации.
Это я понимаю. Как я могу этот хеш сверить через Request
public function rules()
{
return [
'old' => [Auth::user()->password],
'old_password' => ['required', 'confirmed:old'],
'password' => 'required|min:8',
'password_confirmation' => 'required|same:password'
];
}
public function messages()
{
return [
'old_password.required' => 'Укажите текущий пароль',
'old_password.confirmed' => 'Не верный текущий пароль',
'password_confirmation.same' => 'Значения "Новый" и "Повторить пароль" должны совпадать',
];
}
надо как то в строку 'old_password' => ['required', 'confirmed:old'] подставить зашифрованный пароль
Приветствую!
подскажите как проверить старый пароль? я создал Request и в методе rules написал правила, то что я нагуглил но это не работает. Валидатор говорит что я не верный пароль указываю
return [
'old' => [Auth::user()->password],
'old_password' => ['required', 'confirmed:old'],
'password' => 'required|min:8',
'password_confirmation' => 'required|same:password'
];
Зачем модель в цикле вызывать?
модель подключать через use а вотт метод вызвать уже в цыкле.
Приветствую!
Подскажите как в laravel составить запрос на выборку связанных значений.
Есть примерно следующая таблица:
Изначально интересует значение в столбце parent после это значение надо найти в столбце user_id и это должно выполнится в цикле 3 раза. Но также этот запрос должен еще быть и связанным с таблицей users для того чтоб достать имя юзера.
То есть логически запрос должен сделать следующее: в parent найти id текущего авторизованного юзера и потом выполнить цикл до 3 раз.
можно попробовать vendor и composer.lock удалить. После composer install
Может поможет
Приветствую!
Появилась у меня задача по API забрать два json файла, распарсить их и сохранить в базу. Файлы на данный момент по 11мб и 15мб
Создал две команды:
1. php artisan make:command SiteParse
2. php artisan make:command StreetParse
Указал команды в созданных файлах. Код отвечающий за парсинг написал в моделях. В методе handle() вызываю класс для парсинга.
Код в моделе:
$json = file_get_contents('https://site.ru');
Storage::disk('local')->put('json/'.$unixdata.'.json', $json);
$jsonFile = storage_path('app/json/'.$unixdata.'.json');
$jsonData = json_decode(file_get_contents($jsonFile), true);
$sql = array();
foreach($jsonData['data'] as $row)
{
$sql[] = '(....)';
}
return DB::insert("insert into table (....) values ".implode(',', $sql));
(Код может и не идеален ) в обоих случаях код одинаковый, отличается только url запроса.
Результат выполнения:
1. Файл который 11мб все хорошо отработал, записал в базу
2. Файл который 15мб долго соображает, в результате сохранил файл на диске но запись в базу не сделал. При этом не каких ошибок не выдал. Попробовал модель вызвать в контроллере и проверить работу по обращение по роуту и мое удивление что код отработал полностью.
Куда копать, в какую сторону?
Отлично! Это сработало. Спасибо!
Это особеность только на маке?
Да, на MacOS. Пользователя по умолчанию использую root с таким же паролем
Да, в env настройки прописаны. Но вот что нашел. На другом проекте (не ларавел) подключение к базе происходит, без проблем. Но вот через DBeaver подключиться к базе не возможно, хотя ранее подключался. Так же при входе phpMyAdmin перестало просить ввода пароля (использую MAMP). Вообще страница авторизации не появляется:/
Я так понимаю вся причина не выполнения миграций кроется где-то здесь.
Ребят, я только знакомлюсь с ларавел. Пробовал найти решение проблемы на просторах интернета но не выходит.
Дело в том что я создал базу и модель: php artisan make:model Contact -m
Содержимое модели:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateContactsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('contacts', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('subject');
$table->text('message');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('contacts');
}
}
дальше выполняю миграцию: php artisan migrate
здесь получаю кучу ошибок:
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations)
at /Users/serega/Sites/laravel.dev/lara/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|Exception trace:
1 PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)")
/Users/serega/Sites/laravel.dev/lara/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:702 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel", "root", "root", [])
/Users/serega/Sites/laravel.dev/lara/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70Please use the argument -v to see more details.
Пробую выполнить миграцию с -v и получаю следующее:
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations)
at /Users/serega/Sites/laravel.dev/lara/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|Exception trace:
.... далее еще 32 строки с ошибками
любая команда с вязаная с миграцией выдает сначала Please use the argument -v to see more details. потом снова та-же ошибка что предоставил выше.
Как это исправить?