【问题标题】:Laravel Eloquent - Get one RowLaravel Eloquent - 获取一行
【发布时间】:2014-07-18 11:52:15
【问题描述】:

这可能是一个简单的问题,但我无法弄清楚。我正在尝试通过电子邮件获取用户:

$user = User::whereEmail($email)->get();

但这会返回一个 $users 的数组(维度为 1)。所以如果我想得到名字,我必须做$user[0]['first_name']

我尝试使用limit(1)take(1),甚至使用->toArray(),但没有区别。

我做错了什么?

【问题讨论】:

  • 您想从查询结果中获取一行?或者你只想要数据库查询中的一行?

标签: laravel eloquent


【解决方案1】:

只需使用这个:

$user = User::whereEmail($email)->first();

【讨论】:

    【解决方案2】:

    你也可以这样做

    在你使用它之前,你必须在控制器中声明 DB 门面 简单地把这一行放在那个

    use Illuminate\Support\Facades\DB;
    

    现在你可以用这个得到一行

    $getUserByEmail = DB::table('users')->where('email', $email)->first();
    

    也可以这样

    $getUserByEmail = DB::select('SELECT * FROM users WHERE email = ?' , ['useremailaddress@email.com']);
    

    这个返回一个数组,其中只有一个项目,而第一个返回一个对象。请记住这一点。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      使用 Laravel Eloquent,您可以使用 first() 方法获得一行,

      如果没有找到where() 条件,则返回表的第一行,否则给出给定条件的第一行匹配。

      语法:

      Model::where('fieldname',$value)->first();
      

      示例:

      $user = User::where('email',$email)->first(); 
      //OR
      //$user = User::whereEmail($email)->first();
      

      【讨论】:

        【解决方案4】:

        laravel 5.8

        如果您甚至不需要整行,您可以使用value() 方法从记录中提取单个值。该方法会直接返回该列的值:

        $first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');
        

        检查docs

        【讨论】:

          【解决方案5】:

          Laravel 5.2

          $sql = "SELECT * FROM users WHERE email = $email";
          
          $user = collect(\User::select($sql))->first();
          

          $user = User::table('users')->where('email', $email)->pluck();
          

          【讨论】:

          • 这会将所有用户从您的数据库加载到 Web 应用程序服务器的内存中,如果您的用户数据超过服务器 RAM 中的存储量,可能会导致它崩溃。您只需要一个用户,因此无需在所有用户上浪费内存。指示数据库仅按照接受的答案中的建议向您发送$user = User::whereEmail($email)->first(); 的第一个用户。
          【解决方案6】:

          试试看

          $color = \App\Color::take(1)->first();
          

          【讨论】:

            【解决方案7】:

            如果您需要查找任何特定字段,您可以使用

            $user = User::where('email',$email)->first(); 
            
            $user = User::where('username',$username)->first(); 
            
            $user = User::where('id',$id)->first(); 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-30
              • 2019-06-23
              • 2017-09-21
              • 1970-01-01
              • 2013-12-14
              • 2017-01-12
              相关资源
              最近更新 更多