Sé libre de divulgar nuestros post y códigos en tus redes, apóyanos para aumentar nuestra comunidad.
Solución:
Tienes 3 opciones usando relaciones:
1 solución más sencilla:
Places::whereHas('contacts',function ($q) use ($city_id)
$q->whereHas('cities', function ($q) use ($city_id)
$q->where('id', $city_id);
);
)->get();
2 igual que arriba pero usando este PR: https://github.com/laravel/framework/pull/4954
Places::whereHas('contacts.cities', function ($q) use ($city_id)
$q->where('id', $city_id);
)->get();
3 Uso hasManyThrough
relación:
// Place model
public function cities()
return $this->hasManyThrough('City', 'Contact');
// then
Places::whereHas('cities',function ($q) use ($city_id)
$q->where('cities.id', $city_id);
)->get();
editar
Teniendo su esquema, es obvio que ninguna de las sugerencias o su configuración original puede funcionar.
Esta es una relación de muchos a muchos que en Eloquent es belongsToMany
:
// Places model
public function cities()
return $this->belongsToMany('Cities', 'contacts', 'places_id', 'cities_id')
->withPivot( .. contacts table fields that you need go here.. );
// Cities model
public function places()
return $this->belongsToMany('Places', 'contacts', 'cities_id', 'places_id')
->withPivot( .. contacts table fields that you need go here.. );
Entonces puedes llamar a relaciones como esta:
$city = Cities::first();
$city->places; // collection of Places models
// contacts data for a single city-place pair
$city->places->first()->pivot->open_hours; // or whatever you include in withPivot above
Ahora, hay otra forma de configurar esto, en caso de que también necesite Contacts
modelo en sí:
// Places model
public function contact()
return $this->hasOne('Contacts', 'places_id');
// Contacts model
public function city()
return $this->belongsTo('Cities', 'cities_id');
public function place()
return $this->belongsTo('Places', 'places_id');
// Cities model
public function contact()
return $this->hasOne('Contacts', 'cities_id');
después:
$city = Cities::first();
$city->contact; // Contacts model
$city->contact->place; // Places model
hasManyThrough
no funcionará aquí en absoluto
Comentarios y valoraciones
Si te mola la idea, tienes la opción de dejar una reseña acerca de qué le añadirías a esta división.