PHP code example of clickbar / laravel-custom-relations
1. Go to this page and download the library: Download clickbar/laravel-custom-relations 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/ */
clickbar / laravel-custom-relations example snippets
$client = $task->order->project->client;
$tasks = $client->projects->flatMap(fn(Project $project) => $project->order->flatMap(fn(Order $order) => $order->tasks));
$client = $task->client;
$tasks = $client->tasks;
use Clickbar\LaravelCustomRelations\Traits\HasCustomRelation;
class Client extends Model{
use HasCustomRelation;
...
}
class Task extends Model {
use HasCustomRelation;
public function client(): CustomRelationSingle {
return $this->customRelationSingle(
Client::class,
function ($query) {
$query
->join('projects', 'clients.id', 'client_id')
->join('orders', 'projects.id', 'project_id')
->join('tasks', 'orders.id', 'order_id');
},
);
}
}
class Client extends Model {
use HasCustomRelation;
public function tasks(): CustomRelation {
return $this->customRelation(
Task::class,
function ($query) {
$query
->join('orders', 'orders.id', 'order_id')
->join('projects', 'projects.id', 'project_id')
->join('clients', 'clients.id', 'client_id');
},
);
}
}
class Task extends Model {
use HasCustomRelation;
public function client(): CustomRelationSingle {
return $this->customRelationFromParentSingle(
Client::class,
function ($query) {
$query
->join('orders', 'orders.id', 'order_id')
->join('projects', 'projects.id', 'project_id')
->join('clients', 'clients.id', 'client_id');
},
);
}
}
class Client extends Model {
use HasCustomRelation;
public function tasks(): CustomRelation {
return $this->customRelationFromParent(
Task::class,
function ($query) {
$query
->join('projects', 'clients.id', 'client_id')
->join('orders', 'projects.id', 'project_id')
->join('tasks', 'orders.id', 'order_id');
},
);
}
}