【问题标题】:How to get a single value from Query Builder in Laravel?如何从 Laravel 的查询生成器中获取单个值?
【发布时间】:2019-09-25 00:01:48
【问题描述】:

我试图从 Laravel 的查询生成器中获取单个值,但问题是我得到了一个数组。 这是我在 Postman 中使用 dd($myVar) 的查询结果:

[{"is_liked":1}]

还有 echo($myVar):

Collection {#976
  #items: array:1 [
    0 => NewsCommentLike {#970
      #fillable: array:3 [
        0 => "user_id"
        1 => "news_comment_id"
        2 => "is_liked"
      ]
      #connection: "mysql"
      #table: "news_comment_likes"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:1 [
        "is_liked" => 1
      ]
      #original: array:1 [
        "is_liked" => 1
      ]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [
        0 => "*"
      ]
    }
  ]
}

我的代码是:

$previous_is_liked = NewsCommentLike::query()->where(['user_id' => $user_id, 'news_comment_id' => $newsComment->id])->get(['is_liked']);

如何从 is_liked 而非数组中获取单个值?

【问题讨论】:

  • 使用 first() 方法代替 get()
  • 使用first() 然后get()
  • 此方法无效。 @jigs
  • 这个方法不起作用,我也得到了一个数组。 @karan-sadana

标签: php laravel query-builder


【解决方案1】:

$previous_is_liked = NewsCommentLike::query()->where(['user_id' => $user_id, 'news_comment_id' => $newsComment->id])->first()->is_liked;

调用先返回1个结果而不是数组,然后你可以调用你想要的列。

相信你也可以这样称呼:

$previous_is_liked = NewsCommentLike::query()->where(['user_id' => $user_id, 'news_comment_id' => $newsComment->id])->first()->value('is_liked')

【讨论】:

  • 您提出的两种方法都有效。多谢。 @派对环
  • 别担心!如果->first() 返回一个空值,另一个答案很好,你可以做->firstOrFail() 所以如果没有返回任何东西而不是代码“破坏”,它将导致异常。 laravel.com/docs/5.8/eloquent#retrieving-single-models
【解决方案2】:

这就是为什么你有->value('my_column') 方法。所以你最终会得到:

NewsCommentLike::query()
    ->where(['user_id' => $user_id, 'news_comment_id' => $newsComment->id])
    ->value('is_liked');

优点是直接从数据库中检索值。如果你在它之前调用first(),它可以为空,从而破坏你的代码。

【讨论】:

  • 您建议的方法也有效。谢谢。 @oluwatobi-samuel-omisakin
猜你喜欢
  • 1970-01-01
  • 2014-11-13
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2016-07-08
相关资源
最近更新 更多