代码之家  ›  专栏  ›  技术社区  ›  Blues Clues

获取在laravel中满足此方法的所有用户

  •  2
  • Blues Clues  · 技术社区  · 6 年前

    我试图让所有用户都知道 User 模特儿见面了。请看下面的代码:

    User.php

    public function isPicker(){
      return ($this->where('isPicker', 1)) ? true : false;
    }
    

    现在,我可以用 User::all(); ,但它返回所有用户。我只想返回满足 isPicker() 方法。我要做的是:

    @foreach($users as $user)
      @if($user->isPicker())
        {{ $user->first_name }}
      @endif
    @endforeach
    

    这也很管用,但使用起来没有那么有效。如果有很多方法可以检查呢?有这个主意吗?

    3 回复  |  直到 6 年前
        1
  •  4
  •   Brian Lee    6 年前

    只要做:

    $users = User::where('isPicker', 1)->get();
    

    或创建作用域:

    public function scopeIsPicker($query)
    {
        return $query->where('isPicker', 1);
    }
    
    // usage
    $users = User::isPicker()->get();
    
        2
  •  0
  •   James Waring    6 年前

    好吧,你可以把代码改得像这样。

    @foreach($users->where('isPicker', 1)->all() as $user)
        {{ $user->first_name }}
    @endforeach
    

    但只有当users var是一个集合时,这才有效。

    另一个明智的做法是改变你的问题,你如何让用户这样做。

    User::where('isPicker', 1)->get()
    
        3
  •  0
  •   Prashant Prajapati    6 年前

    您可以直接在控制器中查询以下代码,而不是签入模型文件

    1. 如果只想显示isPicker=1个用户。

    控制器代码:

    $users = User::where('isPicker', 1)->get();
    

    刀片代码:

    @foreach($users as $user)
        {{ $user->first_name }}
    @endforeach
    

    或者

    1. 如果要显示所有用户,包括isPicker 0&1。

    控制器代码:

    $users = User::all();
    

    刀片代码:

    @foreach($users as $user)
      @if($user->isPicker == 1)
        {{ $user->first_name }}
      @else
        <p>Picker is 0</p>
      @endif  
    @endforeach
    

    注意:从用户模型文件中删除isPicker函数,因为它不可用。