mutaz's avatar
Level 7

Morph relation

Hi, I have relation between these table:

// in Report.php
    public function sender(): MorphTo
    {
        return $this->morphTo();
    }

    public function receiver(): MorphTo
    {
        return $this->morphTo();
    }
// in User.php
 public function sentReports()
    {
        return $this->morphMany(Report::class, 'sender');
    }

    public function receivedReports()
    {
        return $this->morphMany(Report::class, 'receiver');
    }
// in Admin.php
  public function sentReports()
    {
        return $this->morphMany(Report::class, 'sender');
    }

    public function receivedReports()
    {
        return $this->morphMany(Report::class, 'receiver');
    }

My question is : why when I want to use $report->sender I get :

 $report->sender
= null

> $report->sender->associate(\App\Models\User::find(2))

   Error  Call to a member function associate() on null.

0 likes
1 reply
tisuchi's avatar

@mutaz Either one should work for you:

Approach 1

$report = new Report();
// ... fill other $report fields ...

$user = \App\Models\User::find(2);

$report->sender()->associate($user);
$report->save();

Approach 2

$report = Report::find($reportId);
$user = \App\Models\User::find(2);

if ($report && $user) {
    $report->sender()->associate($user);
    $report->save();
} else {
    // Handle not found case
}

ℹ️ Make sure you already have an existing report.

1 like

Please or to participate in this conversation.