Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

closer01's avatar

how to delete belongsto object

hi,

I have a 3 Models and 3 tables :

Post Model :

 public function users()
    {
        return $this->hasMany(User::class);
    }

User Model :

public function adress()
    {
        return $this->belongsTo('App\Adress', 'adress_id');
    }

And User table like this :

id - post_id - adress_id

When i try to delete post below code works good and deletes users too:

$post = Post::findOrFail($id);
$post->users()->delete();
$post->delete();

But when i delete Post i want to delete Adress tables too which belongs to users.

I have tried something like this :

$post->users()->adress()->delete();

but didnt work. How can i delete them ?

0 likes
4 replies
JoaoPedroAS51's avatar
Level 4

Try do a foreach before delete adress.

foreach($post->users() as $user)
{
    $user->adress()->delete();
}
closer01's avatar

@JoaoPedroAS51 Thank you your solution worked.

I needed to change like this : $post->users() to $post->users

foreach($post->users as $user) { $user->adress()->delete(); }

ahmed-aliraqi's avatar

the user should not belongs to address in this example :/

you should use hasOne() or hasMany() in user relation with his address like this.

public function address()
{
    return $this->hasOne(Address::class);
}

use forgin key on delete cascade in your users migrations

create_users_table migration

$table->unsignedInteger('post_id');
$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');

$table->unsignedInteger('address_id');
$table->foreign('address_id')->references('id')->on('addresses')->onDelete('cascade');

now if you want to delete post, users, addresses just delete the post

Post::findOrFail($id)->delete();

Please or to participate in this conversation.