2015-09-23 3 views
0

Я использую Eloquent, чтобы получить цену моего продукта в базе данных. Вот мой код:Laravel Eloquent Неопределенное смещение: 0

$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] но в foreach $ this-> запись массив Я могу получить доступ к индексу .

Я использую Laravel 4.2.

+0

Что это 'get_price()' делать в своем заявлении? – Iamzozo

+0

Это функция Postgres. Он возвращает цену и валюту продукта. Как вы можете видеть в var_dump ($ value), в этом примере он возвращает 1 в цене и USD в валюте. – jedema

ответ

1

$this->record не массив, а . Поэтому вы не можете получить товар, используя $this->record[0].

Для того, чтобы получить массив, вы можете позвонить методу all() из Illuminate\Database\Eloquent\Collection.

Это будет работать:

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

Спасибо, что работает;) – jedema

-1

Вы можете сделать это

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

Это будет работать, только если запрос выбирает любую запись.

+0

collect() не определен. Я не нашел упоминания о collect() в Laravel или документации PHP. Можете ли вы помочь мне импортировать функцию collect()? – jedema

+0

Его там в Ларавеле, но не в PHP. Проверьте документы @ http://laravel.com/docs/5.1/collections#creating-collections –

+0

Извините, я забыл сказать, что я использую Laravel 4. Я добавлю эту информацию в свой пост. – jedema

Смежные вопросы