Gilko
Gilko

Reputation: 2387

Reduce an array to only the User object - Laravel

The Route where I want to retrieve information about a User with id 6

Route::get('/', function() {
        echo '<pre>';
           var_dump(User::find(6)->where('person_id' == 1));
        echo '</pre>';
    });

It gives me:

object(Illuminate\Database\Eloquent\Builder)#176 (4) {
  ["query":protected]=>
  object(Illuminate\Database\Query\Builder)#175 (19) {
    ["connection":protected]=>
    object(Illuminate\Database\MySqlConnection)#178 (15) {
      ["pdo":protected]=>
      object(PDO)#177 (0) {
      }
      ["queryGrammar":protected]=>
      object(Illuminate\Database\Query\Grammars\MySqlGrammar)#192 (3) {
        ["wrapper":protected]=>
        string(4) "`%s`"
        ["selectComponents":protected]=>
        array(11) {
          [0]=>
          string(9) "aggregate"
          [1]=>
          string(7) "columns"
          [2]=>
          ...........

I only want the User object. The page gives me 44327 lines of text..

Upvotes: 1

Views: 1203

Answers (3)

sybear
sybear

Reputation: 7784

As far as I am concerned, you should use a function like get() that will return you those User objects.

Try :

$users = User::find(6)->where('person_id', 1)->get();
var_dump($users);

Upvotes: 4

Diego Castiblanco
Diego Castiblanco

Reputation: 43

In Eloquent the where method only returns a query object instance, in that moment the framework has yet to go to the database. To accomplish this you should use a trigger method as pointed out such as get() after the query or the first() method if you expect only one result.

there are of course, methods like find() that automatically search by primary key and execute the query right away.

Upvotes: 0

Anam
Anam

Reputation: 12169

You can only use primary id if you use find() or findOrfail().

For example: consider the following users table

id name email

1  AA   [email protected]
2  BB   [email protected]

here id is the primary key. if you want to retrieve data for id 1

$user = User::find(1);

var_dump($user);

So, you can see, your query was invalid

Try the following instead:

 var_dump(User::find(6));

or

var_dump(User::where('person_id', 1)->first());

Upvotes: 1

Related Questions