使用雄辩的方法从laravel 5中的刀片运行选择查询的正确方法

ech*_*shu 3 php mysql laravel eloquent laravel-5

基于compact刀片内部方法所提供的Model变量上的某些选择过滤器,检索列值的正确方法是什么。(Larevl 5)
我读到从视图查询数据库的正确做法是不正确的,因此我遵循惯例使用所需的数据compact来查看视图

但是,在需要根据第一张表的刀片内的foreach循环中返回的某些列值查询另一张表的情况下,我无法找出正确的方法

示例:我有两个模型UserGroup
架构 User

id,name,email,group_id
Run Code Online (Sandbox Code Playgroud)

计划团体表
idgroupname

这是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)

我知道这会返回一个数组,我在这里有两个问题

  1. 如何group_name从基于组的“组模型”中获取列的值。id= $user->id在foreach循环中
  2. 由于从刀片服务器查询db是一种不好的做法,因此,当尚不知道where子句参数时,如何通过契约将数据从控制器传递到刀片服务器,如何利用模型中的值。

编辑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)

我能够得到结果,但是这又不是正确的方法,因此问题仍然没有答案

cha*_*fdo 5

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)

然后将结果传递到您的视图并遍历它。在这里,您将使每个用户数据与其组数据相关联。