Привязка записи в Livewire
Пусть пост уже лежит в базе, а на странице заголовок копируют в отдельное свойство компонента. При сохранении значение снова перекладывают в модель вручную, и легко забыть лишнее поле.
Публичное свойство может хранить
саму модель Eloquent. Поле
связывают с колонкой записи
через wire:model="post.title",
а кнопка сохранения вызывает
save у модели.
Пусть в проекте есть модель
Post и запись с номером 1:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = [
'title',
];
}
?>
Давайте создадим компонент
PostBind:
php artisan make:livewire PostBind --class
Давайте добавим маршрут и страницу:
<?php
Route::get('/posts/bind', function () {
return view('posts-bind');
});
?>
<x-layout>
<livewire:post-bind />
</x-layout>
Давайте загрузим запись
в mount и сохраним
из save:
<?php
namespace App\Livewire;
use App\Models\Post;
use Livewire\Component;
class PostBind extends Component
{
public Post $post;
public function mount()
{
$this->post = Post::find(1);
}
public function save()
{
$this->post->save();
}
public function render()
{
return view('livewire.post-bind');
}
}
?>
Давайте свяжем поле с записью и добавим кнопку:
<div>
<input
type="text"
wire:model="post.title"
>
<button type="button" wire:click="save">
Save
</button>
</div>
Создайте компонент EmployeeBind.
Поле имени связано с записью
работника, сохранение пишет
имя обратно в базу.