我正在尝试更新客户电话号码的值,客户有很多电话,但当我尝试更新电话号码时,我收到此错误:
类型错误:参数1传递给 应用程序\库\后端\ Cliente \ ClienteRepository :: updateTelefono() 必须是App \ Models \ Cliente \ Cliente的一个实例,给出字符串, 呼唤 /Applications/MAMP/htdocs/sgc18/app/Http/Controllers/Backend/Cliente/ClienteController.php 在第159行
在我的ClienteRepository上我有这段代码:
public function updateTelefono(Cliente $cliente, Telefono $telefono, array $data) : Telefono
{
return DB::transaction(function () use ($cliente, $telefono, $data) {
if ($telefono->update([
'telefono' => $data['telefono'],
'tipo_telefono_id' => $data['tipo_telefono_id'],
'comentario' => $data['comentario']
])) {
event(new ClienteTelefonoUpdated($telefono));
return $telefono;
}
throw new GeneralException(__('Hubo un problema al actualizar el teléfono. Intentelo de nuevo.'));
});
}
在我的ClienteController中我有这段代码:
public function updateTelefono(ClienteRequest $request, $cliente_id, $telefono_id)
{
$cliente = Cliente::findOrfail($cliente_id);
$telefono = Telefono::findOrFail($telefono_id);
$this->clienteRepository->updateTelefono($cliente, $telefono, $request->only(
'telefono',
'tipo_telefono_id',
'comentario'
));
return redirect()->to(route('admin.clientes.show', $cliente_id) . '#telefonos')->withFlashSuccess(__('Teléfono actualizado correctamente.'));
}
这是更新的路线:
Route::patch('{id}/telefono/{tid}/update', 'ClienteController@updateTelefono')->name('telefono.update');
admin / clientes / {id} / telefono / {tid} / update | admin.clientes.telefono.update | App \ Http \ Controllers \ Backend \ Cliente \ ClienteController @ updateTelefono
这是我的编辑视图:
@extends('backend.layouts.app')
@section('title', __('Administración de Clientes') . ' | ' . __('Editando Teléfono de Cliente') . ' ' . $cliente->nombre_completo . ' | ' . app_name())
@section('breadcrumb-links')
@include('backend.clientes.includes.breadcrumb-links')
@endsection
@section('content')
<div class="card">
<div class="card-body">
<div class="row">
<div class="col">
<h4 class="card-title mb-0">
{{ __('Administración de Clientes') }}
<small class="text-muted">({{ __('Editando Teléfono de Cliente') }} <b>{{ $cliente->nombre_completo }}</b>)</small>
</h4>
</div>
</div>
<hr />
{{ html()->modelForm($tel, 'PATCH', route('admin.clientes.telefono.update', [$cliente->id, $tel->id]))->open() }}
<div class="row mt-4 mb-4">
<div class="col">
{{ html()->label(__('Número de Teléfono'))->for('telefono') }}
{{ html()->text('telefono')
->class('form-control')
->attribute('maxlength', 191) }}
</div>
</div>
<div class="row mt-4 mb-4">
<div class="col">
{{ html()->label(__('Tipo Teléfono'))->for('tipo_telefono_id') }}
{{ html()->hidden('cliente_id')->value($cliente->id) }}
<select class="form-control tipoTelefono" name="tipo_telefono_id">
@if(isset($tipo_telefonos) && $tipo_telefonos->count() > 0)
@foreach($tipo_telefonos as $i)
<option value="{{ $i->id }}" @if($i->id == old('tipo_telefono_id', $tel->tipo_telefono_id)) selected @endif>{{ $i->descripcion }}</option>
@endforeach
@endif
</select>
</div>
</div>
<div class="row mt-4 mb-4">
<div class="col">
{{ html()->label(__('Comentario'))->for('comentario') }}
{{ html()->textarea('comentario')->class('form-control')->attribute('rows', 4)->attribute('noresize') }}
</div>
</div>
</div>
<div class="card-footer">
<div class="row">
<div class="col">
{{ form_cancel(route('admin.clientes.show', $cliente->id) . '#telefonos', __('Cancelar')) }}
</div><!--col-->
<div class="col text-right">
{{ form_submit(__('Actualizar')) }}
</div><!--row-->
</div><!--row-->
</div><!--card-footer-->
</div>
{{ html()->closeModelForm() }}
@endsection
@push('after-scripts')
<script type="text/javascript">
$(document).ready(function(){
$('.tipoTelefono').select2();
});
</script>
@endpush
答案 0 :(得分:2)
您似乎将$cliente_id
作为客户端的ID而不是客户端的实例传递。
首先尝试找到客户端:
public function updateTelefono(ClienteRequest $request, $cliente_id, $telefono_id)
{
$cliente = \App\Models\Cliente\Cliente::find($cliente_id);
$telefono = \App\Models\Cliente\Telefono::find($telefono_id);
$this->clienteRepository->updateTelefono($cliente, $telefono, $request->only(
'telefono',
'tipo_telefono_id',
'comentario'
));
return redirect()->to(route('admin.clientes.show', $cliente_id) . '#telefonos')->withFlashSuccess(__('Teléfono actualizado correctamente.'));
}