Laravel по-русски

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

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

#1 Re: Laravel 6/7/8 » Livewire статус loading с параметрами » 22.06.2021 10:03:38

Проблема оказалась в неактуально версии пакета livewire

#2 Laravel 6/7/8 » Livewire статус loading с параметрами » 20.06.2021 08:39:48

MadHatter
Ответов: 1

Здравствуйте уважаемые форумчане. Столкнулся с таим вопросом: создаю новый компонент, беру из документации код:

<div>
    <button wire:click="update('bob')">Update</button>

    <div wire:loading wire:target="update('bob')">
        Updating Bob...
    </div>
</div>

и, при клике по кнопке статус Updating Bob... не появляется, но, если я удаляю параметр из кода

<div>
    <button wire:click="update">Update</button>

    <div wire:loading wire:target="update">
        Updating Bob...
    </div>
</div>

то все работает хорошо. Проблема в том что, если у меня в компоненте есть несколько одинаковых кнопок, то на всех них меняется статус. Но, если я добавлю параметр, то статус вообще никак не меняется. Я конечно могу разбить компонент на более мелкие. Но все равно не понятно почему так?

#3 Re: Laravel 6/7/8 » Как данные из одной формы отправить на три таблицу базы данных » 18.06.2021 12:59:56

Если я правильно понимаю о чем идет речь, то у вас тут простые отношения один ко многим. Прочитайте в документации как осуществить данную связь. Что конкретно у вас не получается сделать? Не видно ваших наработок. И до конца не понятно что делает эта форма. Вы хотите в нее вводить вопросы на которые потом будут отвечать пользователи? Либо пользователь отвечает на уже существующие вопросы?

#4 Re: Laravel 6/7/8 » Как сделать очередь сидов » 18.06.2021 12:49:53

В файле database\seeders\DatabaseSeeder.php должны быть прописаны все вызываемые сиды. Там же можно поменять порядок.

#5 Laravel 6/7/8 » Использование директивы @can во вьюхе компонента Livewire » 14.06.2021 20:12:06

MadHatter
Ответов: 0

Здравствуйте уважаемые форумчане. Столкнулся с таким вопросом. В компоненте Livewire мы можем хранить только массивы. Объекты автоматически переводятся в массивы при повторном обращении к компоненту. Но проблема в том что во вьюхе мне хотелось бы использовать директиву @can. Но она требует чтобы параметром была именно модель. Но основная проблема возникает если имеются связи в модели. И я не могу просто создать модель из массива и передать его в директиву. Как быть в такой ситуации?

class MyComponent extends Component
{
    // public MyModel $model; данный вариант не работает, т.к. происходит перевод объекта в массив
    public array $model;
}
@can('update', $model)
 
@endcan

#6 Re: Laravel 6/7/8 » Не могу получить доступ к картинкам » 04.04.2021 23:22:37

Не совсем понятно. В первом примере первым идет ключ 0, а во втором image. Какая-то несостыковка. И не совсем понятно, если это у вас модель, то откуда берется массив?

#7 Re: Laravel 6/7/8 » В чём разница » 04.04.2021 23:18:59

В первом варианте ты редиректиш на именной роут. Если ты захочешь изменить урл этого ройта, то в коде ничего не придется менять. Во втором случае ты редиректиш на урл, и, если ты захочеш поменять его изменить, то придется менять урл во всех редиректах.

#8 Re: Laravel 6/7/8 » Есть ли способ вручную обновить updated_at через конструктор запросов? » 16.11.2020 00:14:03

Ну ты всегда можешь использовать

$request->only(['volume', 'price'])->all()

Это все равно короче

#9 Re: Laravel 6/7/8 » Есть ли способ вручную обновить updated_at через конструктор запросов? » 15.11.2020 22:45:08

Не всегда нужно все подставлять. В данной ситуации мой запрос абсолютно эквивалентен вашему, но короче раз в 5. И это только на одном запросе. Дело, конечно, ваше. Если вам так принципиально делать это с использованием DB, то попробуйте заменить Carbon::now() на now(). Если не сработает, то приведите полный текст ошибки.

#10 Re: Laravel 6/7/8 » Есть ли способ вручную обновить updated_at через конструктор запросов? » 15.11.2020 21:36:10

Странно. Зачем тогда вообще использовать фреймворк, если вам нравится писать больше кода ручками? Неужели этот ваш запрос выглядит лучше чем мой?

$good->update($request->all());

#11 Re: Laravel 6/7/8 » Есть ли способ вручную обновить updated_at через конструктор запросов? » 15.11.2020 11:13:39

На сколько я знаю через DB нет. DB и Eloquent это разные вещи. Первая это сухой запрос и он понятия не имеет что тебе там ещё нужно обновить. А второй берет твою модель. Видит что у тебя там прописано что нужно обновить таймстамп и обновляет. А в чем проблема обновить через Eloquent? Приведите всю строку кода с запросом в котором возникает ошибка.

#13 Re: Laravel 6/7/8 » Laravel Livewire безопасно ли хранить модель в компоненте? » 14.11.2020 19:24:30

Не совсем понял что с этой записью не так. В документации есть и такой вариант, с хранением модели в компоненте. И в интернете много подобных примеров на достаточно авторитетных ресурсах, в том числе и от разработчика самого Livewire. https://forum.laravel-livewire.com/t/he … e-world/22
Но, в целом, я с тобой скорее согласен чем нет. Вероятно модели там делать нечего. Но, если это безопасно, то почему нет?

#14 Laravel 6/7/8 » Laravel Livewire безопасно ли хранить модель в компоненте? » 14.11.2020 18:24:26

MadHatter
Ответов: 2

Здравствуйте уважаемые форумчане. Столкнулся с вопросом - на сколько безопасно хранить модель непосредственно в компоненте? Например так:

public Model $model;
public mount(Model $model){
    $this->model = $model;
}
<livewire:component :model="$model">

На сколько я понимаю, мы отправляем весь компонент в жс вместе с моделью. И возможно ли там внести некоторые изменения? Либо правильнее хранить айдишник модели?

#15 Laravel 6/7/8 » Livewire. Перемееная в компоненте не совпадает с переменной в шаблоне » 25.10.2020 23:21:47

MadHatter
Ответов: 0

Здравствуйте. При работе с Livewire столкнулся с такой проблемой. Например имеем такой компонент:

public $users;
public function mount(User $users){
    $this->users = $users->get()->keyBy('id');
}
public function render(){
    return view('livewire.users');
}

Вопрос в том что если я выведу переменную $this->users в методе рендер, то ключи коллекции совпадают с айдишниками юзеров, как и указано в методе mount. Но, если я ее вывожу в шаблоне то ключи там уже идут с 0. Не могу понять почему так происходит.

#16 Re: Laravel 6/7/8 » Методы классов » 25.10.2020 23:11:26

При создании контроллера через artisan вы можете добавить --resource и в контроллере будут все стандартные экшены.
https://laravel.com/docs/8.x/controller … controller

#17 Laravel 6/7/8 » При тестировании на срабатывают обсерверы » 27.09.2020 14:51:10

MadHatter
Ответов: 0

Добрый день, уважаемые форумчане. Столкнулся с проблемой что, при тестировании на срабатывают обсерверы.

public function testTest(){
    $response = $this->post(route('data.update'), ['key' => 'value');
    $response->assertOk();
}

Собственно в обсервере имеется метод updating, который проверяет различные условия и, если нужно, отклоняет запрос. Собственно в реальности все работает как нужно и запрос отклоняется, но в тесте все равно проходит, только если ручками не вызвать метод updsting. Пробовал привязать обсервер так:

public function setUp():void
{
    parent::setUp();
    Data::boot();

    // и так 
    Data::observe(DataObserver());
}

но ничего не работает. Каким образом можно задействовать обсервер в тестах?

#18 Re: Laravel 6/7/8 » Observer для метода attach » 16.09.2020 22:30:54

Обновился до версии 8. Там все работает без проблем.

#19 Laravel 6/7/8 » Observer для метода attach » 15.09.2020 20:52:29

MadHatter
Ответов: 1

Здравствуйте уважаемые форумчане. Столкнулся с вопросом можно ли каким-нибудь образом перехватить в обсервере метод attach. Перерыл много страниц интернета, но так и не нашел хоть как-то работающий метод. Версия фреймворка 5.6
Связь выглядит так

public function users()
{ 
    return $this->belongsToMany(User::class, 'order_user')->withPivot('id', 'qty', 'delivery')->withTimestamps()->using(OrderUser::class);
}

Аттачу так:

$order->users()->attach($id, ['key' => 'value']);

Аттач проходит нормально Но ни один метод обсервера OrderUserObserver не вызывается. Есть ли способы как можно это реализовать? Возможно на другой версии фреймворка?

#20 Re: Laravel 6/7/8 » Замена айдишника в реквесте на соответствующую модель » 28.08.2020 23:42:19

Примерно правильно. Но в каком методе это прописать, чтобы модель добавилась автоматически? Чтобы я в контроллере прописал $request->book и получил готовую модель. Я понимаю что можно переопределить магический метод __гет. До него я пока толком не добрался, но не уверен что это хорошая идея. От чего вообще появилась данная мысль. В контроллере я могу просто получить модель книги таким образом function show(Book $book) если айдишник передан в урле. И это офигенно удобно. Система сама понимает что я хочу получить и даёт мне это. Хотелось бы похожий функционал в реквесте.

#21 Re: Laravel 6/7/8 » Замена айдишника в реквесте на соответствующую модель » 28.08.2020 07:47:36

К сожалению данная тема не сработала, т.к. я не учел что миддлевара срабатывает до валидации.

#23 Re: Laravel 6/7/8 » Связанные таблицы » 27.08.2020 21:46:54

Ну так вы посмотрите привязан ли какой либо юзер именно к этой модели мессага.

#24 Re: Laravel 6/7/8 » Замена имени параметра в ресурсном роуте » 27.08.2020 21:42:40

Я понимаю что так можно было бы сделать. Меня просто смутил массив с параметрами. Если Тейлор подумал о том чтобы менять имя переменной, то значит мог подумать об этом для каждого отдельного экшена. Хотя, видимо, я ошибался) Спасибо за ответ.

#25 Laravel 6/7/8 » Замена имени параметра в ресурсном роуте » 27.08.2020 10:23:30

MadHatter
Ответов: 2

Здравствуйте уважаемые форумчане. Столкнулся с вопросом. Когда мы в роуте прописываем ресурс, например:

Route::resource('/accounts', 'AccountsController')

, то в качестве параметра получаем $account. В документации сказано что, если я не хочу использовать это имя переменной, то я могу сделать так:

Route::resource('/accounts', 'AccountsController')->parameters(['accounts' => 'user'])

и во всех экшенах я буду иметь переменную $user вместо $account. Но я так и не нашел каким образом я могу поменять переменную для одного экшена. Пробовал вместо ключа accounts подставлять и show и accounts.show и все без толку. Не знаете как это можно реализовать?

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