Функциональность поиска в Laravel с PostgreSQLJquery

Программирование на jquery
Ответить
Anonymous
 Функциональность поиска в Laravel с PostgreSQL

Сообщение Anonymous »

Я работаю над функцией поиска в Laravel. Прежде всего, это мой ajax-запрос, который я отправляю на свой контроллер с помощью поиска

Код: Выделить всё

$.ajax({
url: '{{ route("invoices.search") }}',
type: 'GET',
data: {
search: searchValue
},
success: function (response) {
let tableBody = '';
$.each(response, function (index, estimate) {
let fullLink = encodeURI(estimate.invoice_link);
let truncatedLink = estimate.invoice_link.length > 20 ? estimate.invoice_link.substring(0, 20) + '...' : estimate.invoice_link;
let invoice =estimate;
tableBody += `

${estimate.id}
${estimate.customer ? estimate.customer.contact_name : ''}
${estimate.invoice_number}
${estimate.reference_number}
${estimate.gst_no}
${estimate.due_date}
${new Date(estimate.created_at).toLocaleDateString('en-US', {day: '2-digit', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit', hour12: true})}
${estimate.invoice_status}
${estimate.user.name}

[url=${fullLink}]${truncatedLink}[/url]


${estimate.actions_html}

`;
});
$('#estimate-Table > tbody').html(tableBody);
// Reinitialize dropdowns or manually trigger them if necessary
$('[data-kt-menu-trigger="click"]').on('click', function() {
var $this = $(this);
var $menu = $this.next('.menu-sub-dropdown');

if ($menu.length) {
$menu.toggleClass('show');
}
});
}
});
Далее Это логика моего контроллера

Код: Выделить всё

 public function search(Request $request)
{
$role=auth()->user()->roles[0]->name;
$user_id = auth()->user()->id;
$query = Invoice::query();

$query->with([
'invoicePaymentGateways',
'invoiceLineItems',
'invoiceCustomFields',
'customer',
'user'
]);

if ($role == 'sales-person') {
$query->where('created_by', $user_id);
}

if ($request->has('search') &&  $request->search != '') {
$search = $request->search;

$query->where(function ($q) use ($search) {
$q->where('invoice_number', 'ilike', "%{$search}%") // ilike for case-insensitive LIKE in PostgreSQL
->orWhere('gst_no', 'ilike', "%{$search}%")
->orWhere('invoice_status', 'ilike', "%{$search}%")
->orWhere('reference_number', 'ilike', "%{$search}%")
->orWhereHas('customer', function ($q) use ($search) {
$q->where('contact_name', 'ilike', "%{$search}%");
})
->orWhereHas('user', function ($q) use ($search) {
$q->where('name', 'ilike', "%{$search}%");
});
});
}

$estimate_data = $query->get();

$estimate_data->transform(function ($estimate) {
$estimate->actions_html  = view('pages.apps.invoice-management.invoices.columns._actions', [
'invoice' => $estimate,
'invoice_status' => $estimate->invoice_status
])->render();

return $estimate;
});

return response()->json($estimate_data);
}
здесь в этом поиске я использую два обратных отношения, которые были определены в моей модели:

Код: Выделить всё

   public function customer()
{
return $this->belongsTo(Client::class,'customer_id','contact_id');
}

public function user()
{
return $this->belongsTo(User::class,'created_by');
}
хотя моя функция поиска работает совершенно нормально, когда тип данных моего поля contact_id равен «bigint», но по некоторым причинам у меня есть тип данных этого поля как «varchar(191) )", где, поскольку поле customer_id моей таблицы счетов-фактур имеет значение "bigint", ТАК очевидно, что я получаю ошибку типа соответствия.
Итак, могу ли я что-нибудь сделать, чтобы может выполнять операции поиска с этими разными типами данных.
Я использую PostgreSQL, если это имеет значение.
Я пытался использовать явное приведение типов, но возможно, я делал это неправильно или что-то еще, но в моем случае это не сработает. Все, что я сейчас ищу, это способ выполнить операцию поиска без изменения типа данных в базе данных и таким образом, чтобы это не повлияет на другие функции

Подробнее здесь: https://stackoverflow.com/questions/787 ... postgresql
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»