Laravel 5.5 - 解析db查询的结果

问题描述 投票:0回答:4

我正在使用Laravel Framework 5.5.26,我正在通过以下调用查询我的数据库:

    $symbolsArray = DB::table('exchanges')
        ->join('markets', 'exchanges.id', '=', 'markets.exchanges_id')
        ->where('name', $exchangeName)
        ->get(array(
            'symbol',
        ));

如果我var_dump($symbolsArray)我得到以下输出:

class Illuminate\Support\Collection#619 (1) {
  protected $items =>
  array(99) {
    [0] =>
    class stdClass#626 (1) {
      public $symbol =>
      string(7) "BCN/BTC"
    }
    [1] =>
    class stdClass#621 (1) {
      public $symbol =>
      string(8) "BELA/BTC"
    }
    [2] =>
    class stdClass#623 (1) {
      public $symbol =>
      string(7) "BLK/BTC"
    }
    [3] =>
    class stdClass#627 (1) {
      public $symbol =>
      string(8) "BTCD/BTC"
    }
    ...
  }
}

我试图让$symbol像下面这样:

$symbolsArray[$key]['symbol']

但是,我收到以下错误:

  Cannot use object of type stdClass as array

有关如何从查询输出访问symbol的任何建议?

php laravel laravel-5 laravel-5.5
4个回答
3
投票

它是对象的集合,而不是数组。因此,您需要使用此语法来获取集合中对象的属性:

$symbolsArray[$key]->symbol

如果你只需要获得符号,请使用pluck()而不是get()

->pluck('symbol')->toArray()

1
投票

简单地将给定输出转换为如下所示的数组

$symbolsArray = DB::table('exchanges')
        ->join('markets', 'exchanges.id', '=', 'markets.exchanges_id')
        ->where('name', $exchangeName)
        ->get(array(
            'symbol',
        ))->toArray(); // get data as array not object 

1
投票

DB :: table() - > get()的结果总是一个Collection,你可以像使用->的PHP类中的变量一样访问它们的属性。

在您的示例中,您的$symbolsArray实际上不是数组,您可以使用$symbolsArray[$key]->symbol访问内容。

假设你是Laravel的新手,我建议你看看Laravel内置的ORM Eloquent。它使数据库的使用变得简单明了,如果你深入了解Eloquent的集合,你会发现他们使数据处理变得轻而易举。


0
投票

$ symbolsArray是一个集合,而不是一个数组。得到一个数组,你可以从集合$symbolsArray = DB::table('exchanges') ->join('markets', 'exchanges.id', '=', 'markets.exchanges_id') ->where('name', $exchangeName) ->pluck('symbol')->all();中获取符号,或者你实际上可以通过$new_array = $symbolsArray->toArray()将你的集合转换为数组

© www.soinside.com 2019 - 2024. All rights reserved.