Laravel 中的错误 "Property [nom] does not exist on this collection instance"
Error "Property [nom] does not exist on this collection instance" in Laravel
我有两个表,user
和 technicien
,具有一对一的关系。当我使用下面的表格 "Modifier Techicien" 编辑技术人员时,我希望表格自动填充来自用户和技术人员表的当前信息。
此时表格自动填充只有来自技术人员的信息。
控制器
public function edit($id)
{
$technicien=technicien::find($id);
$users = user::orderBy('id', 'asc')->get();
return view('technicien.edit',['moyenne_avis'=>$technicien],
['actif'=>$technicien],['user_id'=>$technicien])-
>with('users',$users);
}
public function update(Request $request, $id)
{
// do some request validation
$technicien=technicien::find($id);
$technicien->update($request->all());
return redirect('technicien');
}
edit.blade.php
@extends('Layouts/app')
@extends('Layouts.master')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-10">
<h1>Modifier Technicien</h1>
<form action="{{ route('technicien.update', $actif->id , $moyenne_avis->id , $users->nom , $users->prenom) }}" method="post">
{{csrf_field()}}
{{ method_field('PATCH') }}
<div class="form-group">
<label for="">Nom</label>
<input id="nom" type="text" class="form-control" name="nom" value="{{$nom->nom}}" >
</div>
<div class="form-group">
<label for="">Prenom</label>
<input id="nom" type="text" class="form-control" name="nom" value="{{$prenom->prenom}}" >
</div>
<div class="form-group">
<label for="">moyenne Avis</label>
<input type="text" name ="moyenne_avis" class="form-control" value ="{{$moyenne_avis->moyenne_avis}}" >
</div>
<div class="form-group">
<label for="">Etat Technicien</label>
<input type="text" name ="actif" class="form-control" value ="{{$actif->actif}}" >
</div>
<div class="form-group">
<input type="submit" value = "enregistrer" class="form-control btn btn-primary">
</div>
</form>
</div>
</div>
@endsection
如果您的 Laravel 关系设置正确,您应该能够做到:
控制器
public function edit($id)
{
$technicien=technicien::find($id);
$user = $technicien->user;
return view('technicien.edit',['moyenne_avis'=>$technicien],
['actif'=>$technicien],['user_id'=>$technicien])-
>with('user',$user);
}
然后在视图中使用$user->prenom, $user->nom。
请注意,您到目前为止所做的是加载 $users 变量中的所有用户,而不仅仅是一个!
这部分看起来也很奇怪:
return view('technicien.edit',['moyenne_avis'=>$technicien],
['actif'=>$technicien],['user_id'=>$technicien])-
>with('users',$users);
您可以简单地传递整个 $technicien 和 $user 对象,然后从视图访问它们的属性。这是一个示例实现:
控制器
public function edit($id)
{
//Get the technicien and the user associated with it (if the hasOne relation ship is set right)
$technicien=technicien::find($id);
$user = $technicien->user;
//return the view by passing a variable reprensenting the user and one reprensenting the technicien, you could probably access the user directly through the technicien also
return view('technicien.edit')-
>with(['user' => $user, 'technicien' => $technicien]);
}
public function update(Request $request, $id)
{
// do some request validation
$technicien=technicien::find($id);
$technicien->update($request->all());
$technicien->user->update($request->get('user'));
return redirect('technicien');
}
edit.blade.php
@extends('Layouts.master')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-10">
<h1>Modifier Technicien</h1>
<form action="{{ route('technicien.update', $technicien->id}}" method="post">
{{csrf_field()}}
{{ method_field('PATCH') }}
<div class="form-group">
<label for="nom">Nom</label>
<input id="nom" type="text" class="form-control" name="user[nom]" value="{{$user->nom}}" >
</div>
<div class="form-group">
<label for="prenom">Prenom</label>
<input id="prenom" type="text" class="form-control" name="user[prenom]" value="{{$user->prenom}}" >
</div>
<div class="form-group">
<label for="">moyenne Avis</label>
<input type="text" name="moyenne_avis" class="form-control" value ="{{$technicien->moyenne_avis ?? 0}}" >
</div>
<div class="form-group">
<label for="">Etat Technicien</label>
<input type="text" name="actif" class="form-control" value ="{{$technicien->actif ?? 0}}" >
</div>
<div class="form-group">
<input type="submit" value="enregistrer" class="form-control btn btn-primary">
</div>
</form>
</div>
</div>
@endsection
我有两个表,user
和 technicien
,具有一对一的关系。当我使用下面的表格 "Modifier Techicien" 编辑技术人员时,我希望表格自动填充来自用户和技术人员表的当前信息。
此时表格自动填充只有来自技术人员的信息。
控制器
public function edit($id)
{
$technicien=technicien::find($id);
$users = user::orderBy('id', 'asc')->get();
return view('technicien.edit',['moyenne_avis'=>$technicien],
['actif'=>$technicien],['user_id'=>$technicien])-
>with('users',$users);
}
public function update(Request $request, $id)
{
// do some request validation
$technicien=technicien::find($id);
$technicien->update($request->all());
return redirect('technicien');
}
edit.blade.php
@extends('Layouts/app')
@extends('Layouts.master')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-10">
<h1>Modifier Technicien</h1>
<form action="{{ route('technicien.update', $actif->id , $moyenne_avis->id , $users->nom , $users->prenom) }}" method="post">
{{csrf_field()}}
{{ method_field('PATCH') }}
<div class="form-group">
<label for="">Nom</label>
<input id="nom" type="text" class="form-control" name="nom" value="{{$nom->nom}}" >
</div>
<div class="form-group">
<label for="">Prenom</label>
<input id="nom" type="text" class="form-control" name="nom" value="{{$prenom->prenom}}" >
</div>
<div class="form-group">
<label for="">moyenne Avis</label>
<input type="text" name ="moyenne_avis" class="form-control" value ="{{$moyenne_avis->moyenne_avis}}" >
</div>
<div class="form-group">
<label for="">Etat Technicien</label>
<input type="text" name ="actif" class="form-control" value ="{{$actif->actif}}" >
</div>
<div class="form-group">
<input type="submit" value = "enregistrer" class="form-control btn btn-primary">
</div>
</form>
</div>
</div>
@endsection
如果您的 Laravel 关系设置正确,您应该能够做到:
控制器
public function edit($id)
{
$technicien=technicien::find($id);
$user = $technicien->user;
return view('technicien.edit',['moyenne_avis'=>$technicien],
['actif'=>$technicien],['user_id'=>$technicien])-
>with('user',$user);
}
然后在视图中使用$user->prenom, $user->nom。 请注意,您到目前为止所做的是加载 $users 变量中的所有用户,而不仅仅是一个!
这部分看起来也很奇怪:
return view('technicien.edit',['moyenne_avis'=>$technicien],
['actif'=>$technicien],['user_id'=>$technicien])-
>with('users',$users);
您可以简单地传递整个 $technicien 和 $user 对象,然后从视图访问它们的属性。这是一个示例实现:
控制器
public function edit($id)
{
//Get the technicien and the user associated with it (if the hasOne relation ship is set right)
$technicien=technicien::find($id);
$user = $technicien->user;
//return the view by passing a variable reprensenting the user and one reprensenting the technicien, you could probably access the user directly through the technicien also
return view('technicien.edit')-
>with(['user' => $user, 'technicien' => $technicien]);
}
public function update(Request $request, $id)
{
// do some request validation
$technicien=technicien::find($id);
$technicien->update($request->all());
$technicien->user->update($request->get('user'));
return redirect('technicien');
}
edit.blade.php
@extends('Layouts.master')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-10">
<h1>Modifier Technicien</h1>
<form action="{{ route('technicien.update', $technicien->id}}" method="post">
{{csrf_field()}}
{{ method_field('PATCH') }}
<div class="form-group">
<label for="nom">Nom</label>
<input id="nom" type="text" class="form-control" name="user[nom]" value="{{$user->nom}}" >
</div>
<div class="form-group">
<label for="prenom">Prenom</label>
<input id="prenom" type="text" class="form-control" name="user[prenom]" value="{{$user->prenom}}" >
</div>
<div class="form-group">
<label for="">moyenne Avis</label>
<input type="text" name="moyenne_avis" class="form-control" value ="{{$technicien->moyenne_avis ?? 0}}" >
</div>
<div class="form-group">
<label for="">Etat Technicien</label>
<input type="text" name="actif" class="form-control" value ="{{$technicien->actif ?? 0}}" >
</div>
<div class="form-group">
<input type="submit" value="enregistrer" class="form-control btn btn-primary">
</div>
</form>
</div>
</div>
@endsection