Delete Join in query builder Laravel

Viewed 1585

I have a delete query like this:

DELETE prefix_tableA, prefix_tableB, prefix_tableC
FROM prefix_tableA
INNER JOIN prefix_tableB ON prefix_tableA.user_id = prefix_tableB.user_id
INNER JOIN prefix_tableC ON prefix_tableB.user_id = prefix_tableC.user_id
WHERE prefix_tableA.id = 148

Now I want to convert it to query builder. I searched a lot of posts here but still not found expected answer.

I don't want to use DB::raw because I have prefix in my table name. When I change the prefix, my query will error.

Anyway to write this in query builder?

Thank you!

4 Answers

Try this Query your Controller

DB::table('prefix_tableA')->join('prefix_tableB','prefix_tableA.user_id','=','prefix_tableB.user_id')->join('prefix_tableC','prefix_tableB.user_id','=','prefix_tableC.user_id')->where('prefix_tableA.id',148)->delete('prefix_tableA', 'prefix_tableB', 'prefix_tableC');

You can do this using DB::delete() or DB::statement()

Try this query :

\DB::delete('DELETE prefix_tableA, prefix_tableB, prefix_tableC FROM prefix_tableA, prefix_tableB, prefix_tableC INNER JOIN prefix_tableB ON prefix_tableA.user_id = prefix_tableB.user_id INNER JOIN prefix_tableC ON prefix_tableB.user_id = prefix_tableC.user_id  WHERE prefix_tableA.id = 148');

Thanks for your reply guys!

Like I said, I config my table prefix in config/database.php, so use raw query will be error if I change the prefix name in that file.

So my only way for me to do this is write a delete query in each single table and call it in my controller. I implemented about 3 model, long code, but it's the only way in Laravel!

You should try as this way. This way works form me.

$raw_query = 'DELETE prefix_tableA, prefix_tableB, prefix_tableC
FROM prefix_tableA
INNER JOIN prefix_tableB ON prefix_tableA.user_id = prefix_tableB.user_id
INNER JOIN prefix_tableC ON prefix_tableB.user_id = prefix_tableC.user_id
WHERE prefix_tableA.id = ?';  

$status = \DB::delete($raw_query, array('148'));

Documentation: http://laravel.com/docs/database#running-queries

Related