Получение определенной строки, отличной от first ()

У меня небольшая проблема с 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 возвращает ошибку.

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

Заранее спасибо!

4

Решение

Вы хотите использовать takeограничьте количество результатов до трех, а затем распечатайте каждый с циклом foreach. Docs: Запросы Laravel, см. skip а также 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); }

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

2

Другие решения

Для получения данных из базы данных вы можете использовать один из этих методов: 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 получить данные из базы данных.

1

Когда вы используете

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

затем $ продуктов это массив, и вы не должны эхо массив.
Для отображения продуктов вам нужно использовать цикл foreach, как показано ниже

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

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

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

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

0