domanskyi
domanskyi

Reputation: 753

Get data from database and pass to view

In controller I am trying to get data from table, and then pass it to the view.

//controller
public function view($id)
{
    $contact = Contact::where('id', $id);

    return view('contact.edit', ['contact' => $contact]);
}

//view
@foreach($contact as $key=>$value)
    {{ $value }}
@endforeach

But I get just empty page, and if I try to echo value with {{ $contact->first_name}} i just receive error Undefined property: Illuminate\Database\Eloquent\Builder::$first_name.
I also tried to use find method, but got the same result. Table schema:

CREATE TABLE `contacts` (
  `id` int(11) NOT NULL,
  `first_name` varchar(25) NOT NULL,
  `last_name` varchar(25) NOT NULL,
  `email` varchar(35) NOT NULL,
  `home_phone` int(10) DEFAULT NULL,
  `work_phone` int(10) DEFAULT NULL,
  `cell_phone` int(10) DEFAULT NULL,
  `best_phone` enum('home_phone','work_phone','cell_phone') NOT NULL,
  `address_1` varchar(100) DEFAULT NULL,
  `address_2` varchar(100) DEFAULT NULL,
  `city` varchar(35) DEFAULT NULL,
  `state` varchar(35) DEFAULT NULL,
  `zip` int(6) DEFAULT NULL,
  `country` varchar(35) DEFAULT NULL,
  `birth_date` date DEFAULT NULL,
  `manager` int(11) UNSIGNED NOT NULL
);

Upvotes: 1

Views: 299

Answers (2)

rpm192
rpm192

Reputation: 2454

EDIT: Might be because you're not using ->first(); after the query.

Not really sure why that wouldn't work, you can try this instead:

public function view($id)
{
    $contact = Contact::find($id);

    return view('contact.edit')->with('contact', $contact);
}

Then in your view you can access all properties like so:

{{$contact->id}}
{{$contact->first_name}}
//etc

Upvotes: 3

Devon Bessemer
Devon Bessemer

Reputation: 35337

Contact::where('id', $id) only prepares a query with the query builder. You haven't yet executed the query or retrieved any results.

Contact::where('id', $id)->first() will execute the query and retrieve the first result, although since id is likely the primary key, Contact::find($id) is a quicker way to get the first result matching that id.

Upvotes: 4

Related Questions