Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 6/7/8/9/10 » Не отображаются изображения в разделе Проекты » 22.06.2023 21:57:17

в env указана директория public?

FILESYSTEM_DISK=public

на рабочем сервере скинули кэш настроек?

php artisan config:clear
php artisan route:clear

#2 Re: Laravel 6/7/8/9/10 » Обращение к не существующей таблице » 22.06.2023 21:46:35

Сижу разбираюсь с проблемой, но решить не могу.

Пробовал следующее:
1. Сделал полный откат до всех изменений которые вносил сегодня. Далее создал модели, миграции, контроллер шаблоны просто скопировал заново. Ошибка сохраняется sad

2. Добавил одну категорию в базу и сделал методы index, edit, update,
Результат:
index - вывел категорию
edit - подтянул данные и расставил в инпуты
update - не сохраняет данные, снова эта ошибка sad

3. В методах store, update закомментировал строки сохранения данных
Результат:
store - все равно продолжает отображать ошибку yikes
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>
                                    &nbsp;&nbsp;&nbsp;<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);
});

#3 Laravel 6/7/8/9/10 » Обращение к не существующей таблице » 22.06.2023 17:26:09

kull88
Ответов: 2

Всем привет!
Возникла такая ситуация что 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"

Мое удивление стало еще больше когда я переименовал таблицу а ларавел делает обращение все равно к старой которой никогда и не было.

Подскажите пожалуйста в чем проблема?

#4 Re: Laravel 6/7/8/9/10 » Надо узнать количество записей » 15.02.2023 05:09:31

то есть получается логика следующая. В path пишем id юзера от которого проходит регистрация + id юзера который проходит регистрацию?

так?

id parent_id path
-- --------- ----
1  null      '1.'
2  1         '1.1.'
3  2         '1.2.'

#5 Re: Laravel 6/7/8/9/10 » Надо узнать количество записей » 14.02.2023 11:54:32

пройти по связанным id надо. скрин я не просто так приложил. А чтобы наглядно было. В parent хранится значение id того человека по чей ссылке была регистрация

например по ссылке от id=1 прошла регистрация второго юзера, его parent=1
потом от id=2 прошла регистрация третьего юзера, его paren=2

а юзер c id=1 должен видеть всех их тк цепочка началась от его id

#6 Laravel 6/7/8/9/10 » Надо узнать количество записей » 15.01.2023 16:34:19

kull88
Ответов: 7

Доброго времени суток!
Подскажите пожалуйста как узнать количество записей в цикле или запросом сразу можно как то определить.

Есть таблица users примерно такого вида
id
parent - хранить id и мне надо пройти по всем записям где id=3 потом взять id где равен 3 и пройти дальше.

Пример:
на скрине таблица http://joxi.ru/12M08Z6CgZ3dqm если брать пример где paren=3

получится запрос

User::where('parent', '=', Auth::user()->id)->count();

Сейчас надо от этих записей пройти дальше и в результате выдать общее количество

#7 Laravel 6/7/8/9/10 » Валидация формы » 22.03.2021 20:37:28

kull88
Ответов: 0

Приветствую!
что я только уже не пробовал делать:( Есть форма которую отправляю 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);
        }

#8 Re: Laravel 6/7/8/9/10 » Проверить старый пароль » 16.03.2021 20:52:21

В шестой версии нашел инфу только или глазки ибобо )))

Вопрос решен так

return [
            'old_password' => ['required', 'password'],
            'password' => ['required', 'min:8', 'confirmed'],
            'password_confirmation' => ['required', 'same:password'],
        ];

#9 Re: Laravel 6/7/8/9/10 » Проверить старый пароль » 16.03.2021 20:09:35

в целях безопасности пароли не хранятся в БД! хранится некая вычисленная от пароля величина. поэтому сравнивать пароль с ней буквально нельзя. пользуйся методами из документации.

Это я понимаю. Как я могу этот хеш сверить через 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'] подставить зашифрованный пароль

#10 Laravel 6/7/8/9/10 » Проверить старый пароль » 16.03.2021 14:24:02

kull88
Ответов: 3

Приветствую!

подскажите как проверить старый пароль? я создал Request и в методе rules написал правила, то что я нагуглил но это не работает. Валидатор говорит что я не верный пароль указываю

return [
            'old' => [Auth::user()->password],
            'old_password' => ['required', 'confirmed:old'],
            'password' => 'required|min:8',
            'password_confirmation' => 'required|same:password'
        ];

#11 Re: Laravel 6/7/8/9/10 » Подключить модель в цыкле » 07.03.2021 12:44:46

Зачем модель в цикле вызывать?
модель подключать через use а вотт метод вызвать уже в цыкле.

#12 Laravel 6/7/8/9/10 » Выбрать связанные значения » 03.03.2021 08:32:27

kull88
Ответов: 0

Приветствую!
Подскажите как в laravel составить запрос на выборку связанных значений.

Есть примерно следующая таблица:
1.png

Изначально интересует значение в столбце parent после это значение надо найти в столбце user_id и это должно выполнится в цикле 3 раза. Но также этот запрос должен еще быть и связанным с таблицей users для того чтоб достать имя юзера.
То есть логически запрос должен сделать следующее: в parent найти id текущего авторизованного юзера и потом выполнить цикл до 3 раз.

#13 Re: Laravel 6/7/8/9/10 » artisan package:discover error » 01.03.2021 20:31:13

можно попробовать vendor и composer.lock удалить. После composer install
Может поможет

#14 Laravel 6/7/8/9/10 » Планировщик задач » 01.03.2021 20:20:58

kull88
Ответов: 0

Приветствую!
Появилась у меня задача по 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));

(Код может и не идеален hmm ) в обоих случаях код одинаковый, отличается только url запроса.
Результат выполнения:
1. Файл который 11мб все хорошо отработал, записал в базу
2. Файл который 15мб долго соображает, в результате сохранил файл на диске но запись в базу не сделал. При этом не каких ошибок не выдал. Попробовал модель вызвать в контроллере и проверить работу по обращение по роуту и мое удивление что код отработал полностью.

Куда копать, в какую сторону?

#15 Re: Laravel 5.x » Миграции » 16.02.2021 13:01:27

Отлично! Это сработало. Спасибо!

Это особеность только на маке?

#16 Re: Laravel 5.x » Миграции » 16.02.2021 10:08:43

Да, на MacOS. Пользователя по умолчанию использую root с таким же паролем

#17 Re: Laravel 5.x » Миграции » 16.02.2021 09:00:53

Да, в env настройки прописаны. Но вот что нашел. На другом проекте (не ларавел) подключение к базе происходит, без проблем. Но вот через DBeaver подключиться к базе не возможно, хотя ранее подключался. Так же при входе phpMyAdmin перестало просить ввода пароля (использую MAMP). Вообще страница авторизации не появляется:/

Я так понимаю вся причина не выполнения миграций кроется где-то здесь.

#18 Laravel 5.x » Миграции » 16.02.2021 00:01:35

kull88
Ответов: 7

Ребят, я только знакомлюсь с ларавел. Пробовал найти решение проблемы на просторах интернета но не выходит.
Дело в том что я создал базу и модель: 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:70

  2   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:70

  Please 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. потом снова та-же ошибка что предоставил выше.
Как это исправить?

Подвал раздела