@Snapey this is what I get
Illuminate\Database\Eloquent\Collection {#2531 ▼ // app/Observers/ProjectObserver.php:42
#items: []
#escapeWhenCastingToString: false
}
so, what's missing in my code great helper snappy :)
this is my project Model :-
<?php
namespace App\Models;
use App\Support\HasAdvancedFilter;
use App\Traits\Auditable;
use App\Traits\Tenantable;
use Carbon\Carbon;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\SoftDeletes;
class Project extends Model
{
use HasFactory, HasAdvancedFilter, SoftDeletes, Tenantable, Auditable;
public $table = 'projects';
public const STATUES_RADIO = [
'active' => 'Active',
'hold' => 'Hold',
'closed' => 'Closed',
];
protected $dates = [
'created_at',
'start_date',
'end_date',
'updated_at',
'deleted_at',
];
protected $fillable = [
'name',
'owner_id',
'start_date',
'end_date',
'statues',
'team_id',
'assignee_email',
];
public $orderable = [
'id',
'name',
'owner.name',
'created_at',
'start_date',
'end_date',
'statues',
'updated_at',
'deleted_at',
'team.name',
];
public $filterable = [
'id',
'name',
'owner.name',
'created_at',
'package.name',
'start_date',
'end_date',
'statues',
'assignee.email',
'updated_at',
'deleted_at',
'team.name',
];
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
public function owner()
{
return $this->belongsTo(User::class);
}
public function getCreatedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('project.datetime_format')) : null;
}
public function package()
{
return $this->belongsToMany(Package::class);
}
public function getStartDateAttribute($value)
{
return $value ? Carbon::parse($value)->format(config('project.date_format')) : null;
}
public function setStartDateAttribute($value)
{
$this->attributes['start_date'] = $value ? Carbon::createFromFormat(config('project.date_format'), $value)->format('Y-m-d') : null;
}
public function getEndDateAttribute($value)
{
return $value ? Carbon::parse($value)->format(config('project.date_format')) : null;
}
public function setEndDateAttribute($value)
{
$this->attributes['end_date'] = $value ? Carbon::createFromFormat(config('project.date_format'), $value)->format('Y-m-d') : null;
}
public function getStatuesLabelAttribute($value)
{
return static::STATUES_RADIO[$this->statues] ?? null;
}
public function assignees(): BelongsToMany
{
return $this->belongsToMany(User::class);
}
public function getUpdatedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('project.datetime_format')) : null;
}
public function getDeletedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('project.datetime_format')) : null;
}
public function team()
{
return $this->belongsTo(Team::class);
}
}
this is my User Model :-
<?php
namespace App\Models;
use App\Models\UserAlert;
use App\Support\HasAdvancedFilter;
use App\Traits\HasTeam;
use Carbon\Carbon;
use DateTimeInterface;
use Hash;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Contracts\Translation\HasLocalePreference;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements HasLocalePreference, MustVerifyEmail
{
use HasFactory, HasAdvancedFilter, Notifiable, HasTeam, SoftDeletes;
public $table = 'users';
protected $casts = [
'is_approved' => 'boolean',
];
protected $hidden = [
'remember_token',
'password',
];
protected $dates = [
'email_verified_at',
'created_at',
'updated_at',
'deleted_at',
];
protected $fillable = [
'name',
'email',
'password',
'locale',
'team_id',
'is_approved',
];
public $orderable = [
'id',
'name',
'email',
'email_verified_at',
'locale',
'team.name',
'is_approved',
];
public $filterable = [
'id',
'name',
'email',
'email_verified_at',
'roles.title',
'locale',
'team.name',
];
public function getIsAdminAttribute()
{
return $this->roles()->where('title', 'Admin')->exists();
}
public function scopeAdmins()
{
return $this->whereHas('roles', fn ($q) => $q->where('title', 'Admin'));
}
public function alerts()
{
return $this->belongsToMany(UserAlert::class)->withPivot('seen_at');
}
public function preferredLocale()
{
return $this->locale;
}
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
public function getEmailVerifiedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('project.datetime_format')) : null;
}
public function setEmailVerifiedAtAttribute($value)
{
$this->attributes['email_verified_at'] = $value ? Carbon::createFromFormat(config('project.datetime_format'), $value)->format('Y-m-d H:i:s') : null;
}
public function setPasswordAttribute($input)
{
if ($input) {
$this->attributes['password'] = Hash::needsRehash($input) ? Hash::make($input) : $input;
}
}
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function getCreatedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('project.datetime_format')) : null;
}
public function getUpdatedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('project.datetime_format')) : null;
}
public function getDeletedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value)->format(config('project.datetime_format')) : null;
}
public function team()
{
return $this->belongsTo(Team::class);
}
public function projects(): BelongsToMany
{
return $this->belongsToMany(Project::class);
}
}
this is the pivot table
Schema::create('project_user', function (Blueprint $table) {
$table->unsignedBigInteger('project_id');
$table->foreign('project_id', 'project_id_fk_9107252')->references('id')->on('projects')->onDelete('cascade');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id', 'user_id_fk_9107252')->references('id')->on('users')->onDelete('cascade');
});
what's missing please ,, would like to get assignees and send them email