PHP code example of atldays / laravel-eloquent-join-relation
1. Go to this page and download the library: Download atldays/laravel-eloquent-join-relation library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
atldays / laravel-eloquent-join-relation example snippets
use Atldays\JoinRelation\HasJoinRelation;
use App\Models\Author;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Post extends Model
{
use HasJoinRelation;
public function author(): BelongsTo
{
return $this->belongsTo(Author::class, 'author_id');
}
}
$posts = Post::query()
->select('posts.*')
->joinRelation(
relation: 'author',
columns: ['id', 'name', 'email'],
)
->where('authors.active', true)
->get();
$post = $posts->first();
$post->author; // already hydrated, no extra query
$posts = Post::query()
->select('posts.*')
->joinRelation(
relation: 'author',
columns: ['id', 'team_id', 'name'],
)
->joinRelation(
relation: 'author.team',
columns: ['id', 'organization_id', 'name'],
)
->joinRelation(
relation: 'author.team.organization',
columns: ['id', 'name'],
)
->where('posts.published', true)
->where('authors.active', true)
->where('teams.active', true)
->where('organizations.active', true)
->get();
$post = $posts->first();
$post->author;
$post->author->team;
$post->author->team->organization;
$posts = Post::query()
->select('posts.*')
->joinRelation(
relation: 'author',
type: 'left',
columns: ['id', 'name'],
)
->get();
$post = $posts->first();
$post->author; // User model or null
Post::query()
->select('posts.*')
->joinRelation(relation: 'author', columns: ['id', 'team_id', 'name'])
->joinRelation(
relation: 'author.team',
type: 'left',
columns: ['id', 'organization_id', 'name'],
)
->get();
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Query\JoinClause;
$posts = Post::query()
->select('posts.*')
->joinRelation(
relation: 'author',
columns: ['id', 'name', 'email'],
)
->joinRelation(
related: Profile::class,
type: 'left',
join: function (JoinClause $join): void {
$join->on('authors.id', '=', 'profiles.user_id');
},
hydrate: function (Model $model, ?Profile $profile): void {
$model->author?->setRelation('profile', $profile);
},
columns: ['id', 'user_id', 'bio'],
)
->get();
$post = $posts->first();
$post->author->profile;
$posts = Post::query()
->select('posts.*')
->joinRelation(
relation: 'author',
type: 'inner',
columns: ['id', 'team_id', 'name', 'active', 'deleted_at'],
)
->joinRelation(
relation: 'author.team',
type: 'inner',
columns: ['id', 'organization_id', 'name', 'active', 'deleted_at'],
)
->joinRelation(
relation: 'author.team.organization',
type: 'inner',
columns: ['id', 'name', 'active', 'deleted_at'],
)
->where('posts.active', true)
->whereNull('posts.deleted_at')
->where('authors.active', true)
->whereNull('authors.deleted_at')
->where('teams.active', true)
->whereNull('teams.deleted_at')
->where('organizations.active', true)
->whereNull('organizations.deleted_at')
->get();