php-content/Models/ContentAuthor.php

69 lines
1.5 KiB
PHP
Raw Normal View History

2026-01-26 23:59:46 +00:00
<?php
declare(strict_types=1);
namespace Core\Mod\Content\Models;
2026-01-26 23:59:46 +00:00
use Core\Mod\Tenant\Models\Workspace;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class ContentAuthor extends Model
{
use HasFactory;
protected static function newFactory(): \Core\Mod\Content\Database\Factories\ContentAuthorFactory
2026-01-26 23:59:46 +00:00
{
return \Core\Mod\Content\Database\Factories\ContentAuthorFactory::new();
2026-01-26 23:59:46 +00:00
}
protected $fillable = [
'workspace_id',
'wp_id',
'name',
'slug',
'email',
'avatar_url',
'bio',
'social_links',
];
protected $casts = [
'social_links' => 'array',
];
/**
* Get the workspace this author belongs to.
*/
public function workspace(): BelongsTo
{
return $this->belongsTo(Workspace::class);
}
/**
* Get all content items by this author.
*/
public function contentItems(): HasMany
{
return $this->hasMany(ContentItem::class, 'author_id');
}
/**
* Scope to filter by workspace.
*/
public function scopeForWorkspace($query, int $workspaceId)
{
return $query->where('workspace_id', $workspaceId);
}
/**
* Scope to find by WordPress ID.
*/
public function scopeByWpId($query, int $wpId)
{
return $query->where('wp_id', $wpId);
}
}