Laravel provides advanced join clauses which allow us to add where
condition directly inside a join clause.
To add advanced join clauses, we can pass a closure as the second argument to the join method. The closure receives a JoinClause
object, which allows us to define the join condition and add a where condition.
For example, the following query retrieves all articles along with their approved comments only:
<?php
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Query\JoinClause;
$articlesWithApprovedComments = DB::table('articles')
->join('comments', function (JoinClause $join) {
$join->on('articles.id', '=', 'comments.article_id')
->where('comments.is_approved', true);
})
->get();
The query above will produce the following SQL query:
select * from articles
inner join comments on articles.id = comments.article_id and comments.is_approved = 1;
As shown, the where
clause is embedded directly within the on
condition of the join.
Top comments (0)