【问题标题】:unexpected result in a query in laravellaravel 中查询的意外结果
【发布时间】:2023-03-05 12:00:01
【问题描述】:

我是Laravel 的初学者,但一开始有问题。我写了这个查询,我正在等待Sonya Bins 作为结果,但意外地我看到了["Sonya Bins"]。有什么问题?

Route::get('products', function () {
$articles=DB::table('users')->where('id','2')->get()->pluck('name');
return view('products',compact('articles'));
});

【问题讨论】:

    标签: database laravel laravel-query-builder laravel-6


    【解决方案1】:

    pluck 将返回集合。

    我认为id 是您的主键。 您可以只获取第一条记录,并调用其属性名称:

    DB::table('users')->where('id','2')->first()->name;
    

    DB::table('users')->find(2)->name;
    

    【讨论】:

      【解决方案2】:

      pluck 将返回数组,如果您只想获取单个值然后使用value

      // will return array
      $articles=DB::table('users')->where('id','2')->get()->pluck('name');
      
      //will return string
      $articles=DB::table('users')->where('id','2')->value('name');
      // output Sonya Bins
      

      这是文档中的一个示例:

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

      $email = DB::table('users')->where('name', 'John')->value('email');
      

      阅读更多关于它的信息here 希望对您有所帮助。

      谢谢

      【讨论】:

        【解决方案3】:

        pluck() 在 Laravel 5.1 之前曾经返回一个字符串,现在返回一个数组。

        现在该行为的替代方案是value()

        试试这个:

        Route::get('products', function () {
        $articles=DB::table('users')->where('id','2')->get()->value('name');
        return view('products',compact('articles'));
        });
        

        【讨论】:

          【解决方案4】:

          我认为使用模型+查找函数+值函数更容易。

          Route::get('products', function () {
            $articles = User::find(2)->value('name');
            return view('products',compact('articles'));
          });
          

          【讨论】:

            【解决方案5】:

            第一件事是您使用无效名称作为您传递给视图的名称 - 您传递的不是文章而是用户名。

            第二件事是您使用 get 方法而不是第一个(或查找)方法来获取结果 - 您可能希望只有一个 id = 2 的用户。

            所以总结起来你应该使用:

            $userName = DB::table('users')->find(2)->name;
            
            return view('products',compact('userName'));
            

            当然,上面的代码是针对您 100% 确定数据库中有 id = 2 的用户的情况。如果可能没有这样的用户,你应该使用这样的构造:

            $userName = optional(DB::table('users')->find(2))->name;
            

            (如果没有这样的记录,$userName 将为空)

            $userName = optional(DB::table('users')->find(2))->name ?? 'No user';
            

            如果您想使用自定义字符串。

            【讨论】:

            • 第二件事是您使用 get 方法而不是首先获取结果 - 您可能希望只有一个 id = 2 的用户。id 是主键。*
            • @Bashir_Jafari 我已经添加或查找 - 在这种情况下,最好在按主键搜索时使用 find
            猜你喜欢
            • 2019-12-06
            • 1970-01-01
            • 2010-11-25
            • 1970-01-01
            • 1970-01-01
            • 2019-03-06
            • 2019-05-04
            • 1970-01-01
            • 2015-02-14
            相关资源
            最近更新 更多