Заказчик может быть назначен на многие компании. Поэтому при выборе клиента должны появиться соответствующие компании. Вместо названий компаний я получаю company_ids Как я могу получить названия компаний
Я думаю, что я почти у цели
Я включил части контроллера, представления и jquery ниже
JobController.php
public function edit(Job $job)
{
$subJobs = $job->sub_jobs;
$customers = User::all();
$selectedCustomer = $job->user_id;
//dd($selectedCustomer);
$companies = Company::all();
$selectedCompany = $job->company_id;
return view('employees.jobs.edit', compact('job', 'subJobs', 'customers', 'selectedCustomer', 'companies', 'selectedCompany'));
}
public function ajax(Job $job)
{
//Get the Job Number
$id = $job->id;
//Get the user_id of the job
$userId = Job::where('id', '=', $id)->pluck('user_id')->first();
//Show all customers
$customers = User::all();
//dd($customers);
//Show the companies according to the customer list
$companies = Job::where('user_id', '=', $userId)
->pluck('company_id')->unique();
//dd($companies);
return json_encode($companies);
}
public function update(Request $request, Job $job)
{
$this->validate($request, [
'job_owner' => 'required'
]);
//dd($request);
$customer = new User();
$customer->user_id = $request['customer'];
$customer = User::Find($request['customer']);
$customer->companies()->attach($request['company']);
$customer->save();
$job->user_id = $request['customer'];
$job->company_id = $request['company'];
$job->description= $request['description'];
$job->owner= $request['owner'];
$job->status= $request['status'];
$job->despatch_status= $request['despatch_status'];
$job->invoice_status= $request['invoice_status'];
$job->sales_status= $request['sales_status'];
$job->entered_status= $request['entered_status'];
$job->delivery_date= $request['delivery_date'];
$job->delivery_time= $request['delivery_time'];
$job->comp= $request['comp'];
$job->cost= $request['cost'];
$job->profit= $request['profit'];
$job->price= $request['price'];
$job->nbt= $request['nbt'];
$job->vat= $request['vat'];
$job->total_value= $request['total_value'];
$job->save();
$jobs = Job::all();
return view('employees.jobs.job', compact('jobs', $jobs));
}
jobs.edit.blade.php
<form action = "{{ route('employee.job.update',$job->id) }}" method = "post">
@method('PUT')
@csrf
<div class = "form-group">
<label for = "inputJobNumber">Job Number</label>
<input type = "text" class = "form-control" id = "inputJobNumber" name = "id" value = "{{$job->id}}" readonly>
</div>
<div class = "form-group">
<label for = "inputCustomerName">Customer Name</label>
<select name = "customer" class = "form-control" id = "inputUser">
<option value = "">--Select User--</option>
@if ($customers->count())
@foreach ($customers as $customer)
<option value = "{{ $customer->id }}" {{ $selectedCustomer == $customer->id ? 'selected = "selected"' : '' }}>
{{ $customer->name }}
</option>
@endforeach
@endif
</select>
</div>
<div class = "form-group">
<label for = "inputCustomerName">Company Name</label>
<select name = "company" class = "form-control" id = "inputCompany">
<option value = "">--Select Company--</option>
@if ($companies->count())
@foreach ($companies as $key => $value)
<option value = "{{ $key }}" {{ $selectedCompany == $key ? 'selected = "selected"' : '' }}>
{{ $value->name }}
</option>
@endforeach
@endif
Jquery из jobs.edit.blade.php
<script type = "text/javascript">
$(document).ready(function() {
$('select[name = "customer"]').on('change', function() {
var cusotmerId = $(this).val();
if (cusotmerId) {
$.ajax({
url: '/employee/job/ajax/'+cusotmerId,
type: "GET",
dataType: "json",
success:function(data) {
$('select[name = "company"]').empty();
$.each(data, function(key, value) {
$('select[name = "company"]').append('<option value = "'+ key +'">'+ value +'</option>');
});
}
});
}else{
$('select[name = "company"]').empty();
}
});
});
</script>
Мне нужно получить company_ids, когда указан user_id
$companies = DB::table('jobs')
->where('user_id', '=', $userId)
->join('companies', 'jobs.company_id', '=', 'companies.id')
->get()
->unique();
@Tschitsch сейчас борется с частью ajax. Названия компаний не меняются в соответствии с именем пользователя
Не уверен, как вы изменили свой код сейчас, но похоже, что ваше условие where неправильно установлено.
@Tschitsch На самом деле название компании следует брать из таблицы компаний, а не из таблицы вакансий. Это кажется сейчас главной проблемой.

Глядя на свой jobs.edit.blade.php, вы запрашиваете /employee/job/ajax/'+cusotmerId при смене клиента, но для вашего метода JobController::ajax требуется экземпляр Job $job в качестве параметра, что кажется неправильным, попробуйте вместо этого эту имплементацию для JobController::ajax:
public function ajax(Customer $customer)
{
$companies = $customer->companies()->pluck("name", "company_id");
return json_encode($companies);
}
ОБНОВИТЬ
Предположим, JobController::ajax действительно получает задание экземпляра. Основываясь на коде, который я вижу, вы можете реализовать это так:
public function ajax(Job $job)
{
$userId = $job->user_id;
$companies = Company::whereHas('jobs', function($query) use ($userId) {
$query->where('user_id', '=', $userId);
})->pluck('name', 'company_id');
return json_encode($companies);
}
Если связь jobs еще не существует, вам необходимо обновить модель Company с помощью
public function jobs() {
return $this->hasMany(Job::class);
}
Я предпочитаю использовать функцию publich ajax (Job $ job), потому что все происходит через JobController. Мне нужно получить company_ids, когда указан user_id. Я вижу, что соединение должно быть ответом. Обновил исходный пост с присоединением. Хотя это не дает ответа, который мне нужен.
Что ж, я обновил свой ответ, но я бы порекомендовал вам немного очистить свой код, поскольку есть несколько вводящих в заблуждение имен переменных, пара вызовов отладки и даже бесполезные / избыточные фрагменты кода.
Похоже, что часть контроллера готова. Теперь проблема в обзоре. Меню не действует как зависимое раскрывающееся меню
Я вижу, что вы отлаживали свой
$companiesс помощью ajax-метода на своем контроллере, но я все еще думаю, что ваш вызовpluckневерен, это должен быть->pluck('name','company_id')imho. В противном случае вы возвращаете только идентификаторы, а не пары ключ-значение. Можете ли вы попробовать?