2014-12-28 6 views
4

У меня возникла небольшая проблема с laravel, которая может быть легко решена. Короче говоря, ситуация такова: у меня есть две таблицы, одна для пользователей, а другая для продуктов с столбцом «user_id», поэтому я могу идентифицировать связанного пользователя.Получение определенной строки, отличной от первой()

В Laravel, я могу использовать

$user = Sentry::getUser();  //Or Auth::user() if you're not using Sentry 
$products = DB::table('table2')->where('user_id',$user->id); 

И это должно дать мне каждый продукт, который имеет пользователь. Хорошо.

Теперь я хочу показать продукты индивидуально на экране, но, к сожалению, это не работает. Кажется, я не могу повторить эту информацию в строке, потому что она состоит из нескольких строк. Я получаю

Object of class Illuminate\Database\Query\Builder could not be converted to string

Для решения, так как максимальные, связанные продукты я разрешен в системе 3, я пришел с идеей получить каждую строку отдельно и вторя их. Для первого, это просто: $products->first();, но я понятия не имею, как получить два других.

И, может быть, я новичок здесь, но я не думаю, что могу использовать идентификационную информацию о продуктах, так как $ products-> id возвращает ошибку.

Может ли кто-нибудь мне помочь?

Заранее благодарен!

+0

что вы видите вывод при печати продуктов 'print_r ($ products);' –

+0

u можете использовать '-> get()' как обычно, и в представлении выбрал строку u want by '$ bla [ 0,1,2 и т. Д.] -> column_name' или использовать '-> skip (how_many) -> get()', но опять же это не ограничивает одну строку, u все равно придется обрабатывать ее еще дальше в представлении. – ctf0

ответ

2

Вы хотите использовать take, ограничьте количество результатов до трех, а затем распечатайте каждый с помощью цикла foreach. Документы: Laravel Queries, see skip and take.

$products = DB::table('table2')->where('user_id',$user->id)->take(3)->get()

Затем внутри вашей точки зрения, вы можете просто перебирать эти данные:

@foreach($products as $p)

Кроме того, в вашем PHP вы можете перебирать эти данные, используя что-то вроде:

foreach ($products as $product) { var_dump($product); }

(Вы получаете эту ошибку, поскольку y ou пытаются вывести объект результата в целом, а не данные, которые он содержит. Использование цикл фактически извлекает данные из объекта результата, так что вы можете использовать переменный цикл ($product) нормально.)

+0

Вот и все. Как я заметил, прочитав ответы Сурьи и Марцина, я не повторил данные, а объект в целом. И использование '@ foreach' решило это. Кстати, документация Laravel не объясняет, что означает аргумент внутри '-> take()'. Это как «взять три первых объекта?». Спасибо за помощь! Я отмечаю это как решение, поскольку оно объясняется более подробно, чем другие ответы. –

+0

Да. 'take (n)' говорит * Меня интересуют только первые элементы 'n' *. Точно так же, как 'skip (n)' говорит * Меня интересует все, кроме первых элементов 'n'. –

0

При использовании

$products = DB::table('table2')->where('user_id',$user->id); 

Затем $ продуктов является массив, и вы не обязательно echo a массив. Для отображения продуктов, которые вы должны использовать цикл Еогеаспа, как показано ниже

foreach ($products as $key => $product) { 
    var_dump($product); 
} 

Если вы хотите, чтобы показать только три продукты, то вы можете использовать для петли внутри Еогеаспа.

Вы можете узнать больше о Еогеасп снизу ссылка

http://php.net/manual/en/control-structures.foreach.php

+0

@ Down-voter: в вопросе @ gabriel-rebello написал: «Я придумал идею получить каждую строку отдельно и повторить их. Для первого просто: $ products-> first(), но у меня нет идея о том, как получить два других ». Вот почему я написал, как эхо-информацию отдельно использовать foreach loop. Это будет хорошим обучением для меня, если вы оставите комментарий по причине отказа от голосования. – Surya

+0

Хорошо! Я даже не думал о ** foreach **. Думаю, мне еще предстоит многому научиться. Запрос с '-> get();' на самом деле получить массив объектов из db и использовать '@ foreach' в моем представлении решил мою проблему. Большое спасибо Сурья и Марчин! –

1

Чтобы получить данные из базы данных можно использовать один из этих методов: all, get или first.

all Использование:

$products = DB::table('table2')->all(); 

вы получаете все продукты.

Использование first вы можете использовать условие, но вы получите только первую запись, выполнить условие:

$products = DB::table('table2')->where('user_id',$user->id)->first(); 

Использование get вы можете использовать условие, и вы получите все записи, которые удовлетворяют эти условия:

$products = DB::table('table2')->where('user_id',$user->id)->get(); 

Итак, в вашем случае вы хотите использовать get для получения данных из базы данных.

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