Php Laravel 5.4与刀片中枢轴的搜索关系
我正在构建一个搜索功能,但我在一个看似简单但显然困难的功能上遇到了问题 在搜索结果中,我成功地显示了具有给定技能的所有用户。(在本例中,这是一种Php Laravel 5.4与刀片中枢轴的搜索关系,php,laravel,search,pivot-table,Php,Laravel,Search,Pivot Table,我正在构建一个搜索功能,但我在一个看似简单但显然困难的功能上遇到了问题 在搜索结果中,我成功地显示了具有给定技能的所有用户。(在本例中,这是一种归属关系()关系),以及他们的名字、姓氏和电子邮件。我希望条目的最后一部分显示用户在相关技能中的能力(在代码中称为skill\u level)。目前,skill\u level是技能/用户关系中的一个支点;它们由四个字符串中的一个表示:“想要学习”、“新手”、“中级”、“专家”,每个字符串的id值为1-4(包括) 以下是相关代码: 控制器(部分) sea
归属关系()
关系),以及他们的名字
、姓氏
和电子邮件
。我希望条目的最后一部分显示用户在相关技能中的能力(在代码中称为skill\u level
)。目前,skill\u level
是技能/用户关系中的一个支点;它们由四个字符串中的一个表示:“想要学习”、“新手”、“中级”、“专家”,每个字符串的id
值为1-4(包括)
以下是相关代码:
控制器(部分)
search.blade.php(部分)
到目前为止,我尝试的所有操作要么返回条目最后部分的null
,要么抛出错误,试图获取非对象的属性
。有人能提供一些关于在这里做什么的见解吗
更新:我尝试了显而易见的答案
$user->pivot->skill\u level
,这让我尝试获取非对象的属性。
一个用户有很多技能。所以你有很多技能水平。你可以这样访问它
@foreach($user->skills as $skill)
{{ $skill->pivot->skill_level }}
@endforeach
或
编辑:根据评论,您可以这样做以获取所查询技能的查询级别
{{ $user->skills()->where('skills.name', $theskillName)->first()->pivot->skill_level }}
一位同事这样回答:
{$user->skills->first(函数($skill)use($theskillName){return$skill->name==$theskillName;})->pivot->skill_level}
但不确定这是否安全。在搜索时,请添加pivot\u column\u names。因此,我认为在您的情况下,pivot\u skill\u level第一个答案不起作用,因为我正在搜索具有查询技能的用户。我需要使用
@foreach($users as user)
,否则它将无法正常工作。我的同事(他向我提供了我发布的答案)说,你的第二个答案不起作用,因为它只会抓住用户的第一项技能,而不是被询问的技能。两个答案都会起作用。第一个将获取所有设置的技能等级。$user模型在$users的循环中,因此没有问题。第二个例子是如何直接获取。您从未在问题中提到您只想显示查询到的技能级别。
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');
}
@foreach($user->skills as $skill)
{{ $skill->pivot->skill_level }}
@endforeach
{{ $user->skills()->first()->pivot->skill_level }}
{{ $user->skills()->where('skills.name', $theskillName)->first()->pivot->skill_level }}