У меня небольшая проблема с 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 возвращает ошибку.
Может кто-нибудь мне помочь?
Заранее спасибо!
Вы хотите использовать 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
) обычно.)
Для получения данных из базы данных вы можете использовать один из этих методов: 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
получить данные из базы данных.
Когда вы используете
$products = DB::table('table2')->where('user_id',$user->id);
затем $ продуктов это массив, и вы не должны эхо массив.
Для отображения продуктов вам нужно использовать цикл foreach, как показано ниже
foreach ( $products as $key => $product ) {
var_dump( $product );
}
Если вы хотите показать только три продукта, то вы можете использовать за петля внутри для каждого.
Вы можете узнать больше о для каждого снизу ссылка