Laravel 5.5 - 解析db查询的结果

时间:2017-12-21 11:10:27

标签: php laravel laravel-5 laravel-5.5

我正在使用 $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

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

4 个答案:

答案 0 :(得分:3)

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

$symbolsArray[$key]->symbol

如果您只想获得符号,请使用pluck()代替get()

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

答案 1 :(得分: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 

答案 2 :(得分:1)

DB :: table() - > get()的结果始终是Collection,您可以像使用->的PHP类中的变量一样访问其属性。

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

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

答案 3 :(得分:0)

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