我有一个模型“ applicants”,并且它与“ BloodGroup”模型具有“ belongsTo”关系。
这是ApplicantController中的索引函数:
public function index()
{
$user = Auth::user();
// $user = User::find(1);
$applicants = $user->applicants->where('visible', 1);
foreach ($applicants as $applicant) {
$applicant->bloodGroup;
$applicant->fiqa;
$applicant->gender;
}
// return response()->json($applicants);
return view('applicants.index', ['applicants' => $applicants]);
}
这是我从API得到的响应:
{
"1": {
"id": 4,
"blood_group_id": 1,
"created_at": "2019-04-22 13:24:16",
"updated_at": "2019-04-26 10:21:41",
"blood_group": {
"id": 1,
"name": "A+",
"visible": 1,
"created_at": "2019-04-22 08:21:19",
"updated_at": "2019-04-22 08:21:19"
}
}
}
但是当我将数据传递给视图时。它在以下几行中产生错误:
<div class="row mx-4">
<div class="col-06 pr-3">
<p class="h5">Name:</p>
</div>
<div class="col-06">
<p><?php echo e($applicant->blood_group->name); ?></p>
</div>
</div>
BloodGroup模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class BloodGroup extends Model
{
public function applicants()
{
return $this->hasMany('App\Applicant');
}
}
“申请人”表中的“血型”关系:
public function bloodGroup()
{
return $this->belongsTo('App\BloodGroup');
}
能否请您指出我做错了什么以及应该怎么做。
答案 0 :(得分:0)
我发现您的代码存在问题,因为您正在运行查询,但实际上并没有从中查询任何内容:
$applicants = $user->applicants()->where('visible', 1);
这将是必需的:
$applicants = $user->applicants()->where('visible', 1)->get();
因为无论如何您都在打电话给他们,也许请尝试通过以下方式加载关系:
$applicants = $user->applicants()->with('blood_group')->where('visible', 1)->get();
导致索引方法看起来像这样:
public function index()
{
$user = Auth::user();
$applicants = $user->applicants()->with('blood_group')->where('visible', 1)->get();
return view('applicants.index', ['applicants' => $applicants]);
}
然后,您可以像这样访问刀片文件中的$applicants
:
@foreach($applicants as $applicant)
<div class="row mx-4">
<div class="col-06 pr-3">
<p class="h5">Name:</p>
</div>
<div class="col-06">
<p>{{$applicant->blood_group->name}}</p>
</div>
</div>
@endforeach
希望这会有所帮助。
答案 1 :(得分:-1)
它说的是什么错误?
return view('applicants.index', ['applicants' => $applicants]);
您正在将applicants
传递到视图,但是在其中使用了$applicant
。您是否在$applicants
上循环?如果没有,那就是错误。
答案 2 :(得分:-1)
根据您的恋爱关系
public function bloodGroup()
{
return $this->belongsTo('App\BloodGroup');
}
对于特定的申请人$applicant = Applicant::find(1);
,您将能够获得与$applicant->bloodGroup
类似的bloodGroup,现在您应该能够使用$applicant->bloodGroup->name
来获取姓名。
您的代码应为
public function index()
{
$user = Auth::user();
$applicants = $user->applicants()->where('visible', 1)->get();
return view('applicants.index', ['applicants' => $applicants]);
}
您认为
@foreach ( $applicants as $applicant )
{{ $applicant->bloodGroup->name }}
@endforeach
@swonder的关注
>>> App\User::find(1)->roles->where('role_id', '<', 1)
=> Illuminate\Database\Eloquent\Collection {#3178
all: [
App\models\Role {#3166
id: 1,
name: "super-admin",
display_name: "Super Admin",
description: "This will be one permission, that can not be assigned or
modified.",
created_at: "2019-01-11 19:06:23",
updated_at: "2019-01-11 19:06:23",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3141
user_id: 1,
role_id: 1,
},
},
],
}
是@swonder是正确的,您应该使用
$user->applicants()->where('visible', 1)->get();
而不是$user->applicants->where('visible', 1)
,而不是all()
或get()
,您可以尝试在其中收集,但是在查看以下观察结果后,您可能不希望这样做
>>> App\User::find(1)->roles->where('role_id', '=', 1)
=> Illuminate\Database\Eloquent\Collection {#3160
all: [],
}
>>> App\User::find(1)->roles->whereStrict('role_id', '=', 1)
=> Illuminate\Database\Eloquent\Collection {#3163
all: [],
}
>>> App\User::find(1)->roles->whereStrict('role_id', '<', 1)
=> Illuminate\Database\Eloquent\Collection {#3169
all: [],
}
>>> App\User::find(1)->roles->whereStrict('role_id', '>', 1)->all()
=> []
>>> App\User::find(1)->roles->whereStrict('role_id', '>', 1)->all()
>>> App\User::find(1)->roles->whereStrict('role_id', '=', 1)->all()
=> []
>>> App\User::find(1)->roles->whereStrict('role_id', '>', 1)->all()
=> []