Search code examples
phpmysqllaravelcartalyst-sentry

Getting a specific row other than first()


I'm having a little problem with laravel that may be easily solved. To be short, the situation is: I have two tables, one for the users and the other one for products that has a column 'user_id' so I can identify the associated user.

In Laravel, I can use

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

And that should give me every product that user has. Good.

Now I want to show the products individually on screen, but unfortunately that doesn't work. It seems I can't echo this information in a string because it's made of multiple rows. I get

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

For the solution, since the maximum associated products I allowed in the system is 3, I came up with the idea of getting each row separately and echoing them. For the first one, it's simple: $products->first(); but I have no idea on how to get the other two.

And maybe I'm being a newbie here, but I don't think I can use the products' id info since $products->id returns an error.

Can anyone help me?

Thanks in advance!


Solution

  • You want to use take, limit the number of results to three and then print out every one with a foreach loop. Docs: Laravel Queries, see skip and take.

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

    Then, inside your view, you can just iterate through this data:

    @foreach($products as $p)

    Alternatively, in your PHP you can iterate through this data using something like:

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

    (You are getting that error because you are trying to output a result object as a whole, and not the data it contains. Using the loop actually fetches the data from the result object so you can then use the loop variable ($product) normally.)