$databases * @property-read int|null $databases_count * @property-read Collection $nodes * @property-read int|null $nodes_count * * @method static \Database\Factories\DatabaseHostFactory factory($count = null, $state = []) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost newQuery() * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost query() * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost whereHost($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost whereMaxDatabases($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost wherePassword($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost wherePort($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|DatabaseHost whereUsername($value) */ class DatabaseHost extends Model implements Validatable { use HasFactory; use HasValidation; /** * The resource name for this model when it is transformed into an * API representation using fractal. Also used as name for api key permissions. */ public const RESOURCE_NAME = 'database_host'; /** * The attributes excluded from the model's JSON form. */ protected $hidden = ['password']; /** * Fields that are mass assignable. */ protected $fillable = [ 'name', 'host', 'port', 'username', 'password', 'max_databases', ]; /** @var array */ public static array $validationRules = [ 'name' => ['required', 'string', 'max:255'], 'host' => ['required', 'string'], 'port' => ['required', 'numeric', 'between:1,65535'], 'username' => ['required', 'string', 'max:32'], 'password' => ['nullable', 'string'], 'node_ids' => ['nullable', 'array'], 'node_ids.*' => ['required', 'integer', 'exists:nodes,id'], ]; protected function casts(): array { return [ 'id' => 'integer', 'max_databases' => 'integer', 'password' => 'encrypted', 'created_at' => 'immutable_datetime', 'updated_at' => 'immutable_datetime', ]; } public function nodes(): BelongsToMany { return $this->belongsToMany(Node::class); } /** * Gets the databases associated with this host. */ public function databases(): HasMany { return $this->hasMany(Database::class); } public function buildConnection(string $database = 'mysql', string $charset = 'utf8', string $collation = 'utf8_unicode_ci'): Connection { /** @var Connection $connection */ $connection = DB::build([ 'driver' => 'mysql', 'host' => $this->host, 'port' => $this->port, 'database' => $database, 'username' => $this->username, 'password' => $this->password, 'charset' => $charset, 'collation' => $collation, ]); return $connection; } }