ech*_*shu 3 php mysql laravel eloquent laravel-5
基于compact刀片内部方法所提供的Model变量上的某些选择过滤器,检索列值的正确方法是什么。(Larevl 5)
我读到从视图查询数据库的正确做法是不正确的,因此我遵循惯例使用所需的数据compact来查看视图
但是,在需要根据第一张表的刀片内的foreach循环中返回的某些列值查询另一张表的情况下,我无法找出正确的方法
示例:我有两个模型User和Group
架构 User表
id,name,email,group_id
Run Code Online (Sandbox Code Playgroud)
计划团体表
id,groupname
这是UserController-> compact方法
$users = \App\User::all(array('id','name','email','group_id'));
$groups = \App\Group::all(array('id','group_name'));
return view('user.index', compact('users','groups'));
Run Code Online (Sandbox Code Playgroud)
刀片如何需要它们
@foreach ($users as $user)
<tr>
<th>{{$user->id}}</th>
<th>{{$user->name}}</th>
<th>{{$user->email}}</th>
<th>
<!-- Here i need to run something like
select group_name from group where id = $user->id -->
{{$groups->where('id','=',$user->group_id) }}
</th>
<th>Actions</th>
</tr>
@endforeach
Run Code Online (Sandbox Code Playgroud)
我知道这会返回一个数组,我在这里有两个问题
group_name从基于组的“组模型”中获取列的值。id= $user->id在foreach循环中编辑1:
我将最后一个组查询修改为
<th>@if($groups->where('id','=',$user->group_id))
@foreach($groups as $group)
{{$group->group_name}}
@endforeach
@endif
</th>
Run Code Online (Sandbox Code Playgroud)
我能够得到结果,但是这又不是正确的方法,因此问题仍然没有答案
在User模型中
public function group()
{
return $this->belongsTo('App\Group');
}
Run Code Online (Sandbox Code Playgroud)
在Group模型中
public function users()
{
return $this->hasMany('App\User');
}
Run Code Online (Sandbox Code Playgroud)
在您的控制器中
$users = \App\User::with('group')->get();
return view('user.index', compact('users'));
Run Code Online (Sandbox Code Playgroud)
现在在你看来你可以做
$user->group->name;
Run Code Online (Sandbox Code Playgroud)
小智 5
我了解您知道“从视图中查询是一种不好的做法”。你为什么不使用联接。
DB::table('users')->join('groups', 'users.group_id', '=', 'groups.id')->get();
Run Code Online (Sandbox Code Playgroud)
然后将结果传递到您的视图并遍历它。在这里,您将使每个用户数据与其组数据相关联。
| 归档时间: |
|
| 查看次数: |
29970 次 |
| 最近记录: |