'Laravel Property [title] does not exist on the Eloquent builder instance

I am getting an error while trying to display data from the database.This problem occurred by other people who have created posts on this website. but they have a foreach loop and I don't. so all the answers given for this problem do not work.

article controller

public function showwereld($id)
{
    $artikels = Artikel::where('id', $id);
    return view('pages.show')->with('artikels', $artikels);
}

show.blade.php

<div class="row">
    <div class="artikeltitel marginauto">
        <div class="col-md-6 offset-md-3">
            <h2>{{$artikels->title}}</h2>
            <p style="font-weight: bold;">{{$artikels->intro}}</p>              
            <p>{{$artikels->body}}</p>
        </div>
    </div>
</div>

enter image description here



Solution 1:[1]

I think you are missing the get() : $artikels = Artikel::where('id', $id)->get();

Solution 2:[2]

Eager Loading Relationships(THIS WILL WORK JUST UNDERSTAND THIS)

DataTables support searching and sorting of eager loaded relationships when using Eloquent. this example will show you how to setup a eager loading search using Eloquent Engine.

To enable search, we need to eager load the relationship we intend to use using Laravel's User::with('posts') api.

use DataTables;

Route::get('user-data', function() {
$model = App\User::with('posts');

return DataTables::eloquent($model)
            ->addColumn('posts', function (User $user) {
                return $user->posts->map(function($post) {
                    return str_limit($post->title, 30, '...');
                })->implode('<br>');
            })
            ->toJson();
});

To trigger search on posts relationship, we need to specify the relation.column_name as the name attribute in our javascript appropriately.

<script>
$(document).ready(function() {
    $('#users-table').DataTable({
        processing: true,
        serverSide: true,
        ajax: '{{ url("collection/basic-object-data") }}',
        columns: [
            {data: 'id', name: 'id'},
            {data: 'name', name: 'name'},
            {data: 'email', name: 'email'},
            {data: 'posts', name: 'posts.title'},
            {data: 'created_at', name: 'created_at'},
            {data: 'updated_at', name: 'updated_at'}
        ]
    });
});
</script>

Looking at {data: 'posts', name: 'posts.title'},:

data: posts represents the data key (data.posts) that we are going to display on our table. name: posts.title represents the User model relationship (posts) and the column we are going to perform our search (title).

Solution 3:[3]

Or basically try this:

$artikel = Artikel::find($id);
return view(pages.wereld, ['artikel' => $artikel]);

on view use this:

    {{ $artikel->name }}

On your code: You are calling to get a record but trying to use the plural.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sarout
Solution 2 Aditya Tomar
Solution 3 Dragonthoughts