How to Use ->relationship() with $get() in $form?
I'm working on a Filament form where gst_customer_name should be saved in the guest_customers table when the user enters a name that doesn't match an existing customer.
~
TextInput::make('customer_name')
->afterStateUpdated(function ($state, callable $set) { $customer = \App\Models\Customer::where('customer_name', 'like', '%' . $state . '%')->first(); if ($customer) { $set('customer_id', $customer->id); $set('gst_customer_name', null); $set('gst_tmp_name', null); } else { $set('customer_id', null); $set('guestCustomer.gst_customer_name', $state); $set('gst_tmp_name', $state); } }) Hidden::make('customer_id'), TextInput::make('gst_tmp_name'), Fieldset::make()->relationship('guestCustomer') ->schema([ TextInput::make('gst_customer_name') ->default(function($state, $set, $get){ // dd($state); $set('gst_customer_name', $get('../../gst_tmp_name')); $set('gst_customer_name', $state); }), TextInput::make('guestCustomer.gst_customer_name') ->default(function($state, $set, $get){ // dd($state); $set('gst_customer_name', $get('gst_tmp_name')); $set('gst_customer_name', $state); }), ]), ~
->afterStateUpdated(function ($state, callable $set) { $customer = \App\Models\Customer::where('customer_name', 'like', '%' . $state . '%')->first(); if ($customer) { $set('customer_id', $customer->id); $set('gst_customer_name', null); $set('gst_tmp_name', null); } else { $set('customer_id', null); $set('guestCustomer.gst_customer_name', $state); $set('gst_tmp_name', $state); } }) Hidden::make('customer_id'), TextInput::make('gst_tmp_name'), Fieldset::make()->relationship('guestCustomer') ->schema([ TextInput::make('gst_customer_name') ->default(function($state, $set, $get){ // dd($state); $set('gst_customer_name', $get('../../gst_tmp_name')); $set('gst_customer_name', $state); }), TextInput::make('guestCustomer.gst_customer_name') ->default(function($state, $set, $get){ // dd($state); $set('gst_customer_name', $get('gst_tmp_name')); $set('gst_customer_name', $state); }), ]), ~
3 Replies
You need to enable live() but also set it be onBlur Id say. Or just it afterCreate and assign it?
thanks @toeknee for your reply.
I use this
->relationship('guestCustomer', condition: fn ($get) => !empty($get('guestCustomer.gst_customer_name')))
and it works.
I will appriciate if you could give some insight on this query inside ->searcheable()
->searchable(query: function (Builder $query, string $search): Builder {
return $query->leftJoin('vehicles', function($join) {
$join->on('vehicles.id', '=', 'quotations.vehicle_id')
->whereColumn('vehicles.customer_id', '=', 'quotations.customer_id');
})
->leftJoin('guest_customers', 'guest_customers.id', '=', 'quotations.guest_customer_id')
->select('quotations.*', 'vehicles.plate_no as vehicle_plate', 'guest_customers.gst_plate_no as guest_plate')
->where('vehicles.plate_no', 'like', "%{$search}%")
->orWhere('guest_customers.gst_plate_no', 'like', "%{$search}%");
})
but it gives error
What’s the error?