'Got error 'Trying to get property 'id' of non-object' even dd function return it right

I have to display data from post table based on user. But, I always get error

Trying to get property 'id' of non-object

even though dd($user) and dd($post) return it right. dd($user) return 1st row, dd($post)return 1st row. When commenting all the 'dd' function , I got 'Trying to get property 'id' of non-object' at $post = post::find($user->id);. However when I dd($post->article_title, $post->id),I do get the data

    $RMM = DB::table('companies')->where('branch', 'RMM')->get();
    foreach ($RMM as $RMM) {
        $user = User::find($RMM->id);
        $post = post::find($user->id);
        $post_data = array('title' => $post->article_title,
            'name' => $post->author,
            'date' => date('Y-m-d', strtotime($post->date)),
        );

result of dd(post)

result of dd(user)



Solution 1:[1]

Be aware, when you dd() something it die at first iteration in foreach, error may occurs in another iterates, maybe id 1 is exists in user but 3 or 4 is not.

Solution 2:[2]

use something like this:

$RMM_details = Company::where('branch', 'RMM')->get();
            $RMM_details->transform(function($RMM)use($user){
            $user = User::find($RMM->id);
            $post = post::find($user->id);
                return [
                    'title' => $post->article_title,
                    'name' => $post->author,
                    'date' => date('Y-m-d', strtotime($post->date)),
                ];
            });

Solution 3:[3]

It might be because $post = post::find($user->id); is returning null value at some stances.

Check if it is empty or not by using the function empty and try again.

 $RMM = DB::table('companies')->where('branch', 'RMM')->get();
    foreach ($RMM as $RMM) {
        $user = User::find($RMM->id);
if(!empty($user->id){
        $post = post::find($user->id);
}
        $post_data = array('title' => $post->article_title,
            'name' => $post->author,
            'date' => date('Y-m-d', strtotime($post->date)),
        );

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
Solution 2 Gorakh Yadav
Solution 3 AnkitS