首页 文章

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

提问于
浏览
3

什么是基于刀片内 compact 方法使用的Model变量上的某个选择过滤器检索列值的正确方法 . (Larevl 5)
我读到从视图查询数据库staright是一个不好的做法,因此我按照惯例利用 compact 方法查看所需的数据

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

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

id,name,email,group_id

方案组表
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'));

这里刀片需要它们

@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

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

  • 如何从基于组的组模型中获取 group_name 列的值 . 在foreach循环中 id = $user->id

  • 由于从刀片服务器查询数据库是一种不好的做法,当如何知道where子句参数时,如何通过压缩机将数据从控制器传递到刀片来利用模型中的值 .

Edit 1:

我将最后一个组查询修改为

<th>@if($groups->where('id','=',$user->group_id))
                  @foreach($groups as $group)
      {{$group->group_name}}            
                  @endforeach
                @endif
</th>

而且我能够得到结果,但这又不是一个正确的方法,所以问题仍然没有答案

2 回答

  • 4

    User 模型中

    public function group()
    {
        return $this->belongsTo('App\Group');
    }
    

    Group 模型中

    public function users()
    {
        return $this->hasMany('App\User');
    }
    

    在你的控制器中

    $users = \App\User::with('group')->get();
    return view('user.index',  compact('users'));
    

    现在在你看来你可以做到

    $user->group->name;
    
  • 4

    我很欣赏你知道“从视图中查询是不好的做法” . 你为什么不用join .

    DB::table('users')->join('groups', 'users.group_id', '=', 'groups.id')->get();
    

    然后将结果传递给您的视图并循环遍历它 . 在这里,您将拥有与其组数据相关联的每个用户数据 .

相关问题