Laravel Eloquent Undefined offset:0

时间:2015-09-23 08:47:01

标签: php arrays laravel laravel-4 eloquent

我使用Eloquent来获取我的产品在数据库中的价格。这是我的代码:

$this->record = DB::select('select * from get_price(?);', array($product_name));
$this->price = $this->record[0]->price;

我肯定会通过此查询获得一个价格。但是当我执行我的代码时,我收到以下错误:

Undefined offset: 0 in line 2

PHP找不到$ this->记录[0] 。所以,我决定使用以下代码:

$this->record = DB::select('select * from get_price(?);', array($product_name));
var_dump(isset($this->record[0]));
foreach ($this->record as $key => $value) {
    var_dump($key);
    var_dump($value);
    var_dump($value->price);exit();
}
$this->price = $this->record[0]->price;

我得到了:

// var_dump(isset($this->record[0]));
bool(true)

// var_dump($key);
int(0)

// var_dump($value);
class stdClass#2059 (2) {
  public $price =>
  string(2) "1"
  public $currency =>
  string(3) "USD"
}

// var_dump($value->price);exit();
string(2) "1"

我不知道为什么我无法访问 $ this->记录[0] 但是在 $ this->记录数组的前面我可以访问 0 索引。

我正在使用Laravel 4.2。

2 个答案:

答案 0 :(得分:2)

$this->record不是数组,而是集合。 因此,您无法使用$this->record[0]获取项目。

要获取数组,您可以调用all()的方法Illuminate\Database\Eloquent\Collection

这将有效:

$r = $this->record->all();
dd($r[0]);

答案 1 :(得分:-1)

你可以这样做

$this->record = DB::select('select * from get_price(?);', array($product_name));
$this->price = collect($this->record)->first()->price;

只有在查询获取任何记录时才会有效。