Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Проблема оказалась в неактуально версии пакета livewire
Здравствуйте уважаемые форумчане. Столкнулся с таим вопросом: создаю новый компонент, беру из документации код:
<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>
то все работает хорошо. Проблема в том что, если у меня в компоненте есть несколько одинаковых кнопок, то на всех них меняется статус. Но, если я добавлю параметр, то статус вообще никак не меняется. Я конечно могу разбить компонент на более мелкие. Но все равно не понятно почему так?
Если я правильно понимаю о чем идет речь, то у вас тут простые отношения один ко многим. Прочитайте в документации как осуществить данную связь. Что конкретно у вас не получается сделать? Не видно ваших наработок. И до конца не понятно что делает эта форма. Вы хотите в нее вводить вопросы на которые потом будут отвечать пользователи? Либо пользователь отвечает на уже существующие вопросы?
В файле database\seeders\DatabaseSeeder.php должны быть прописаны все вызываемые сиды. Там же можно поменять порядок.
Здравствуйте уважаемые форумчане. Столкнулся с таким вопросом. В компоненте Livewire мы можем хранить только массивы. Объекты автоматически переводятся в массивы при повторном обращении к компоненту. Но проблема в том что во вьюхе мне хотелось бы использовать директиву @can. Но она требует чтобы параметром была именно модель. Но основная проблема возникает если имеются связи в модели. И я не могу просто создать модель из массива и передать его в директиву. Как быть в такой ситуации?
class MyComponent extends Component
{
// public MyModel $model; данный вариант не работает, т.к. происходит перевод объекта в массив
public array $model;
}
@can('update', $model)
@endcan
Не совсем понятно. В первом примере первым идет ключ 0, а во втором image. Какая-то несостыковка. И не совсем понятно, если это у вас модель, то откуда берется массив?
В первом варианте ты редиректиш на именной роут. Если ты захочешь изменить урл этого ройта, то в коде ничего не придется менять. Во втором случае ты редиректиш на урл, и, если ты захочеш поменять его изменить, то придется менять урл во всех редиректах.
Ну ты всегда можешь использовать
$request->only(['volume', 'price'])->all()
Это все равно короче
Не всегда нужно все подставлять. В данной ситуации мой запрос абсолютно эквивалентен вашему, но короче раз в 5. И это только на одном запросе. Дело, конечно, ваше. Если вам так принципиально делать это с использованием DB, то попробуйте заменить Carbon::now() на now(). Если не сработает, то приведите полный текст ошибки.
Странно. Зачем тогда вообще использовать фреймворк, если вам нравится писать больше кода ручками? Неужели этот ваш запрос выглядит лучше чем мой?
$good->update($request->all());
На сколько я знаю через DB нет. DB и Eloquent это разные вещи. Первая это сухой запрос и он понятия не имеет что тебе там ещё нужно обновить. А второй берет твою модель. Видит что у тебя там прописано что нужно обновить таймстамп и обновляет. А в чем проблема обновить через Eloquent? Приведите всю строку кода с запросом в котором возникает ошибка.
Может стоило бы модель свою показать?
$model->update(['created_at' => now()])
Не совсем понял что с этой записью не так. В документации есть и такой вариант, с хранением модели в компоненте. И в интернете много подобных примеров на достаточно авторитетных ресурсах, в том числе и от разработчика самого Livewire. https://forum.laravel-livewire.com/t/he … e-world/22
Но, в целом, я с тобой скорее согласен чем нет. Вероятно модели там делать нечего. Но, если это безопасно, то почему нет?
Здравствуйте уважаемые форумчане. Столкнулся с вопросом - на сколько безопасно хранить модель непосредственно в компоненте? Например так:
public Model $model;
public mount(Model $model){
$this->model = $model;
}
<livewire:component :model="$model">
На сколько я понимаю, мы отправляем весь компонент в жс вместе с моделью. И возможно ли там внести некоторые изменения? Либо правильнее хранить айдишник модели?
Здравствуйте. При работе с 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. Не могу понять почему так происходит.
При создании контроллера через artisan вы можете добавить --resource и в контроллере будут все стандартные экшены.
https://laravel.com/docs/8.x/controller … controller
Добрый день, уважаемые форумчане. Столкнулся с проблемой что, при тестировании на срабатывают обсерверы.
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());
}
но ничего не работает. Каким образом можно задействовать обсервер в тестах?
Обновился до версии 8. Там все работает без проблем.
Здравствуйте уважаемые форумчане. Столкнулся с вопросом можно ли каким-нибудь образом перехватить в обсервере метод 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 не вызывается. Есть ли способы как можно это реализовать? Возможно на другой версии фреймворка?
Примерно правильно. Но в каком методе это прописать, чтобы модель добавилась автоматически? Чтобы я в контроллере прописал $request->book и получил готовую модель. Я понимаю что можно переопределить магический метод __гет. До него я пока толком не добрался, но не уверен что это хорошая идея. От чего вообще появилась данная мысль. В контроллере я могу просто получить модель книги таким образом function show(Book $book) если айдишник передан в урле. И это офигенно удобно. Система сама понимает что я хочу получить и даёт мне это. Хотелось бы похожий функционал в реквесте.
К сожалению данная тема не сработала, т.к. я не учел что миддлевара срабатывает до валидации.
Сделал это на уровне миддлеваров.
Ну так вы посмотрите привязан ли какой либо юзер именно к этой модели мессага.
Я понимаю что так можно было бы сделать. Меня просто смутил массив с параметрами. Если Тейлор подумал о том чтобы менять имя переменной, то значит мог подумать об этом для каждого отдельного экшена. Хотя, видимо, я ошибался) Спасибо за ответ.
Здравствуйте уважаемые форумчане. Столкнулся с вопросом. Когда мы в роуте прописываем ресурс, например:
Route::resource('/accounts', 'AccountsController')
, то в качестве параметра получаем $account. В документации сказано что, если я не хочу использовать это имя переменной, то я могу сделать так:
Route::resource('/accounts', 'AccountsController')->parameters(['accounts' => 'user'])
и во всех экшенах я буду иметь переменную $user вместо $account. Но я так и не нашел каким образом я могу поменять переменную для одного экшена. Пробовал вместо ключа accounts подставлять и show и accounts.show и все без толку. Не знаете как это можно реализовать?