Ich baue eine Suchfunktion, aber ich habe Probleme mit einer scheinbar einfachen, aber eindeutig schwierigen Funktion.Laravel 5.4 Suchbeziehung mit Pivot in Blade
In den Suchergebnissen habe ich erfolgreich alle Benutzer angezeigt, die eine bestimmte Fähigkeit haben. (In diesem Fall ist es eine belongsToMany()
Beziehung), sowie ihre first_name
, last_name
und email
. Ich möchte, dass der letzte Teil des Eintrags die Kompetenz des Benutzers (im Code als skill_level
bezeichnet) in der fraglichen Fähigkeit anzeigt. Im Moment ist skill_level
ein Drehpunkt in der Fähigkeit/Benutzer-Beziehung; Sie werden mit einem von vier Strings bezeichnet: "Wills Learn", "Novice", "Intermediate", "Expert", und jeder hat einen id
von 1-4 (inklusive).
Hier ist der entsprechende Code:
Controller (teilweise)
public function results(Request $request){
$theskillName = $request->input('theskillName');
$users = User::whereHas('skills', function ($q) use($theskillName) {
$q->where('name', '=', $theskillName);
})->get();
$skills = Skill::orderBy('name', 'ASC')->get();
if(count($users) > 0){
return view('search.search', compact('users', 'skills', 'theskillName'));
}
else {
return view ('search.search', compact('skills'));
}
}
search.blade.php (teilweise)
@if(isset($users))
<p>The following people have {{ $theskillName }} as one of their skills:</p>
<h2>People</h2>
<table class="table table-striped">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Skill Level</th>
</tr>
</thead>
<tbody>
@foreach($users as $user)
<tr>
<td>{{$user->first_name}}</td>
<td>{{$user->last_name}}</td>
<td>{{$user->email}}</td>
<td>{{$user->???->skill_level }}</td> /* <- What replaces ??? here? */
</tr>
@endforeach
</tbody>
</table>
@endif
User.php (teilweise)
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'id', 'first_name', 'last_name', 'middle', 'email', 'status', 'role', 'password'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'remember_token'
];
// Gets all of the skills the user knows
public function skills()
{
return $this->belongsToMany('App\Skill')->withPivot('skill_level');
}
Alles, was ich so versucht habe weit gibt entweder null
für diesen letzten Teil des Eintrags zurück oder spuckt den Fehler Trying to get property of non-object
aus. Kann mir jemand einen Einblick geben, was hier zu tun ist?
Update: habe ich versucht, die offensichtliche Antwort $user->pivot->skill_level
, die mir gegeben haben Trying to get property of non-object.
Wenn Sie suchen, fügen Sie pivot_column_name – Vilius
so ich denke, in Ihrem Fall wäre es pivot_skill_level – Vilius