79831180

Date: 2025-11-26 21:50:35
Score: 0.5
Natty:
Report link

After a while trying some stuff, this approach worked for me:

App\Models\DatosContacto.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Alquiler;

class DatosContacto extends Model {
use HasFactory;

protected $guarded = [];

public $timestamps = false;

protected $table = 'datos_contacto';

protected $hidden = ['tipo_usuario','alquiler_id'];

public function alquiler() {
return $this->belongsTo(Alquiler::class, 'alquiler_id');
}
}

App\Models\ContratadorContacto.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use App\Models\Alquiler;
use App\Models\DatosContacto;

class ContratadorContacto extends DatosContacto {
}

App\Models\PublicadorContacto.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use App\Models\Alquiler;
use App\Models\DatosContacto;

class PublicadorContacto extends DatosContacto {
}

App\Models\Alquiler.php:

<?php

namespace App\Models;

(...)

use App\Models\DatosContacto;
use App\Models\PublicadorContacto;
use App\Models\ContratadorContacto;

(...)

class Alquiler extends Model {

protected $appends = ['reputacion', 'ambientes', 'datosContacto'];

(...)

public function datosContacto() {
return $this->hasMany(DatosContacto::class, 'alquiler_id');
}

public function publicadorContacto() {
return $this->hasOne(PublicadorContacto::class, 'alquiler_id')
->where('tipo_usuario', 'publicador');
}

public function contratadorContacto() {
return $this->hasOne(ContratadorContacto::class, 'alquiler_id')
->where('tipo_usuario', 'contratador');
}

public function getDatosContactoAttribute() {
if ($this->disponible) return null;

if (!$this-\>publicadorContacto() || !$this-\>contratadorContacto()) return null;

return (object)\[  
  'publicadorContacto'  =\> $this-\>publicadorContacto,  
  'contratadorContacto' =\> $this-\>contratadorContacto,  
\];  

}

(...)
}

My tinker result, when I do Alquiler::find(37) is like this:

+datosContacto: {#6836
+"publicadorContacto": App\Models\PublicadorContacto {#6713
id: 55,
#tipo_usuario: "publicador",
email: "[email protected]",
horario_atencion: "24x7",
telefono: "11-3546-5888",
telefono_alt: "4701-1108",
celular: "11-3546-5888",
whatsapp: "(54) 11-3546-5888",
#alquiler_id: 37,
},
+"contratadorContacto": App\Models\ContratadorContacto {#6755
id: 54,
#tipo_usuario: "contratador",
email: "[email protected]",
horario_atencion: "24x7",
telefono: "11-3233-9668",
telefono_alt: "5325-1372",
celular: "11-3233-9668",
whatsapp: "(54) 11-3233-9668",
#alquiler_id: 37,
},
},

Thank a lot for your suggestions!

Best regards

Leandro

Reasons:
  • Blacklisted phrase (0.5): Best regards
  • Blacklisted phrase (1): regards
  • Whitelisted phrase (-1): worked for me
  • Long answer (-1):
  • Has code block (-0.5):
  • Contains question mark (0.5):
  • Self-answer (0.5):
  • Low reputation (0.5):
Posted by: Leandro Caplan