Как получить одно значение из Query Builder в Laravel? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь получить одно значение из Query Builder в Laravel, но проблема в том, что я получаю массив. это мой запрос в Postman с dd ($ myVar):

[{"is_liked":1}]

, а также с эхо ($ 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 , а не массива?

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Вот почему у вас есть метод ->value('my_column').Таким образом, вы получите:

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

Преимущество заключается в том, что значение извлекается непосредственно из базы данных.Если вы позвоните first() до этого, он может быть нулевым, поэтому нарушите ваш код.

1 голос
/ 07 мая 2019

$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')

...