现在我具有以下模型结构,
Country -> State -> City -> Student
Student
模型包括first_name
和last_name
。
因此,我希望通过提供学生的名字来过滤国家/地区。就像如果我给John
一样,那么我想要一个拥有名字为John
的学生的国家/地区列表。
我正在尝试类似的事情,
我在Students()
模型中添加了一个名为Country
的方法,并从该方法返回Student
实例。但是现在,我坚持寻找如何过滤国家/地区。
感谢您的期待。
答案 0 :(得分:1)
在学生模型中创建以下内容:
public function city()
{
return $this->belongsTo(City::class,'city_id', 'id');
}
,然后在“城市模型”中创建以下内容:
public function state()
{
return $this->belongsTo(State::class,'state_id', 'id');
}
最后进入状态模型:
public function country()
{
return $this->belongsTo(Country::class,'country_id', 'id');
}
例如,如果您在控制器中做了类似的事情:
$students = Student::where('name', 'John')->get();
在视图中:
@foreach($students as $student)
$student->city->state->country->country_name;
@endforeach
您可以这样访问。
答案 1 :(得分:0)
我最近遇到了一个类似的问题,我自己也提出了以下解决方案。也许有更简单的方法,但是我想这会带您前进。
首先,如您所述,我们用dim_size(int index)
== first_name
查询所有用户,然后将查询限制为仅输出ID。
John
然后我们将其与国家模型中的$users = User::where('first_name', 'John')->get()->pluck('id');
的结果进行交叉比较。因为我不知道要查询想要的国家/地区,所以我仅以荷兰为例-这就是我的住所。
Students()
要执行此操作,必须确保在模型的$users = Country::where('name', 'the Netherlands')->students()->whereIn('id', $users)->get();
函数中,Students()
不存在。
最终“结果”:
get()
答案 2 :(得分:0)
如果您已正确设置了模型和关系,则需要使用with with函数调用它们
$students = Student::where('name','John')->with('city.state.country')->get();
遍历$students
@foreach($students as $student)
{{ $student->city->state->country }}
@endif