'integer', 'asking_price' => 'integer', 'price_negotiable' => 'boolean', 'photos' => 'array', 'documents' => 'array', 'specs_json' => 'array', 'working_hours' => 'integer', 'submitted_at' => 'datetime', 'appraised_at' => 'datetime', ]; public function business() { return $this->belongsTo(Business::class); } public function seller() { return $this->belongsTo(Contact::class, 'seller_contact_id'); } public function broker() { return $this->belongsTo(User::class, 'assigned_broker_user_id'); } public function creator() { return $this->belongsTo(User::class, 'created_by'); } public function parentListing() { return $this->belongsTo(self::class, 'parent_listing_id'); } public function childListings() { return $this->hasMany(self::class, 'parent_listing_id'); } public function media() { return $this->hasMany(ListingMedia::class, 'listing_id')->orderBy('sort_order'); } public function appraisals() { return $this->hasMany(Appraisal::class, 'listing_id'); } public function deals() { return $this->hasMany(Deal::class, 'listing_id'); } public function offers() { return $this->hasMany(Offer::class, 'listing_id'); } public function pipelineLinks() { return $this->hasMany(PipelineLink::class, 'listing_id'); } public function marketComps() { return $this->hasMany(MarketComp::class, 'listing_id'); } public function catalogMatches() { return $this->hasMany(CatalogMatch::class, 'listing_id')->orderByDesc('match_score'); } public function researchCases() { return $this->hasMany(ResearchCase::class, 'listing_id'); } public function priceInquiries() { return $this->hasMany(PriceInquiry::class, 'listing_id'); } public function pipelineEvents() { return $this->hasMany(PipelineEvent::class, 'entity_id') ->where('entity_type', self::class); } }