Merhaba,
Polymorphic bir yapı kullandım offers adında.
5 tane modelim var hepsini orada offerable_type ve offerable_id olarak güzel bir şekilde tutuyorum.
Fakat teklifler bölümünde bunların hepsinin o an ki kullanıcı ID'ye göre foreach ile döndürmek istiyorum.
Fakat hepsi farklı model olduğu için içerisindeki mesela Sağlık Sigortası olan veya Seyahat sigortası olan ilişkilerinde içerisine girip o tabloda user_id, auth()->user()->id diyip çekmek istiyorum. Tüm tabloyu değil. Ve çekerken de tabi ki diğer tablolardaki bilgiye de ulaşmak. Biraz kafam karıştı 🙂
$offers = (new Offer)->with([
'offerable' => function($q) {
$q->with(['health' => function($query) {
$query->where('user_id', auth()->user()->id);
}]);
$q->with(['travel' => function($query) {
$query->where('user_id', auth()->user()->id);
}]);
}
])->get();`
şeklinde yapmaya çalıştım fakat olmadı.
"Call to undefined relationship [healths] on model [App\Health]."
gibi bir hata aldım umarım anlatabilmişimdir yoksa tekrar resimli şekilde veya daha detaylı anlatabilirim.
EDIT:
Galiba sorunu çözdüm.
Modele her biri için fonksiyon ekledim.
public function healths()
{
return $this->belongsTo(Health::class, 'offerable_id')->whereOfferableType(Health::class);
}
public function travels()
{
return $this->belongsTo(Travel::class, 'offerable_id')->whereOfferableType(Travel::class);
}
Controller kısmında ise şu şekilde çağırdım.
$offers = Offer::with('offerable')
->whereHas('healths', function ($query) {
$query->where([
'user_id' => auth()->user()->id
]);
})->orWhereHas('travels', function ($query) {
$query->where([
'user_id' => auth()->user()->id
]);
})->get();