Currently I've got 3 models, Listing, Offer & Payment which have the following relationships:
Listing
class Listing extends Model {
public function offers() {
return $this->hasMany(\App\Models\Offer::class)->orderBy('created_at', 'desc');
}
}
Offer
class Offer extends Model {
public function payment() {
return $this->hasOne(\App\Models\Payment::class, 'item_id', 'id')->where('item_type', \App\Models\Offer::class)->where('status', '1');
}
public function listing() {
return $this->belongsTo(\App\Models\Listing::class)->withTrashed();
}
}
Payment
class Payment extends Model {
public function offer() {
return $this->belongsTo(\App\Models\Offer::class, 'item_id', 'id')->withTrashed();
}
}
How can I go from them Listing model & return a relationship with the payments table directly?
Listing can have unlimited amounts of Offer but Offer can only have 1 max Payment
To find any corresponding payment information, I'm having to query the Offer based on the listing_id
within the model, and then access the Offer->payment
, when I'd much prefer to be able to just do something like this:
$transaction_id = $id;
$listing = Listing::whereHas('payment', function($q) use ($id) {
$q->where('transaction_id', $id);
$q->where('user_id', Auth::user()->id);
})->first();