laravel eloquent relationships example
Example 1: how to use where relationship laravel
Event::with(["owner", "participants" => function($q) use($someId){
$q->where('participants.IdUser', '=', 1);
}])
Example 2: one to many laravel
For example, a blog post may have an infinite number of comments. And a single
comment belongs to only a single post
class Post extends Model
{
public function comments()
{
return $this->hasMany('App\Models\Comment');
}
}
class Comment extends Model
{
public function post()
{
return $this->belongsTo('App\Models\Post');
}
}
Example 3: whereHas site:https://laravel.com/docs/
use Illuminate\Database\Eloquent\Builder;
$posts = Post::whereHas('comments', function (Builder $query) {
$query->where('content', 'like', 'code%');
})->get();
$posts = Post::whereHas('comments', function (Builder $query) {
$query->where('content', 'like', 'code%');
}, '>=', 10)->get();
Example 4: associate laravel
When updating a belongsTo relationship, you may use the associate method. This
method will set the foreign key on the child model:
$account = App\Account::find(10);
$user->account()->associate($account);
$user->save();
When removing a belongsTo relationship, you may use the dissociate method. This
method will set the relationship foreign key to null:
$user->account()->dissociate();
$user->save();
Example 5: laravel belongs to
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
public function user()
{
return $this->belongsTo('App\Models\User');
}
}
Example 6: Eloquent Query Scope on Relationships
Problem :
$activePosts = Post::where('active', true)->get();
Solution:
class Post extends Model
{
public function scopeActive($query)
{
return $query->where('active', 1);
}
}
$activePosts = Post::active()->get();
=======================================================
Create Dynamic Scope:
class Post extends Model
{
public function scopeActive($query, $value)
{
return $query->where('active', $value);
}
}
$activePosts = Post::active(true)->get();
$notActivePosts = Post::active(false)->get();
===========================================================
Scope with Relation :
$category = Category::find(1);
$activePost = $category->posts()->active(true)->get();