1. Go to this page and download the library: Download awobaz/compoships 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/ */
awobaz / compoships example snippets
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function tasks()
{
//WON'T WORK WITH EAGER LOADING!!!
return $this->hasMany(Task::class)->where('team_id', $this->team_id);
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class A extends Model
{
use \Awobaz\Compoships\Compoships;
public function b()
{
return $this->hasMany('B', ['foreignKey1', 'foreignKey2'], ['localKey1', 'localKey2']);
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class B extends Model
{
use \Awobaz\Compoships\Compoships;
public function a()
{
return $this->belongsTo('A', ['foreignKey1', 'foreignKey2'], ['ownerKey1', 'ownerKey2']);
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class A extends Model
{
use \Awobaz\Compoships\Compoships;
public function b()
{
return $this->belongsToMany(
B::class,
'a_b', // pivot table
['a_foreignKey1', 'a_foreignKey2'], // foreign pivot keys for A
['b_foreignKey1', 'b_foreignKey2'], // foreign pivot keys for B
['localKey1', 'localKey2'], // local keys on A
['localKey1', 'localKey2'] // local keys on B
);
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use \Awobaz\Compoships\Compoships;
public function tasks()
{
return $this->hasMany(Task::class, ['team_id', 'category_id'], ['team_id', 'category_id']);
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
use \Awobaz\Compoships\Compoships;
public function user()
{
return $this->belongsTo(User::class, ['team_id', 'category_id'], ['team_id', 'category_id']);
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use \Awobaz\Compoships\Compoships;
public function projects()
{
return $this->belongsToMany(
Project::class,
'project_user',
['user_team_id', 'user_department_id'],
['project_team_id', 'project_department_id'],
['team_id', 'department_id'],
['team_id', 'department_id']
);
}
}
namespace App;
use Awobaz\Compoships\Compoships;
use Illuminate\Database\Eloquent\Model;
class TenantUser extends Model
{
use Compoships;
protected $primaryKey = 'id';
public $incrementing = false;
protected $keyType = 'string';
protected $compositeKey = ['id', 'tenant_id'];
protected $guarded = [];
}
$user = TenantUser::where('id', 'u1')->where('tenant_id', 't1')->first();
$user->name = 'Alice';
$user->save();
// UPDATE tenant_users SET name = ? WHERE id = ? AND tenant_id = ?
use Awobaz\Compoships\Queue\QueueableCompositeCollection;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Queue\SerializesModels;
class ProcessUsers
{
use SerializesModels;
public QueueableCompositeCollection $users;
public function __construct(Collection $users)
{
$this->users = QueueableCompositeCollection::for($users);
}
public function handle(): void
{
$users = $this->users->restore();
// ...
}
}