Relationship Model Bersyarat

July 9, 2019

Selama ini apabila perlukan filter untuk mencapai rekod relationship, saya akan gunakan with() disertakan dengan filter where(). Ini akan mendapatkan rekod-rekod yang berkait seperti yang kita kehendaki. Tapi ada masanya filter itu memang sentiasa ada seperti relationship User hasOne Address yang akan memulangkan Address terkini User. Tapi kita masih hendak menyimpan alamat-alamat lama User. Jadi dalam Model Address, kita menandakan Address terkini dengan status=1. Alamat terdahulu kita tandakan dengan status=0.

Jadi pada model User kita boleh jadikan relationshipnya sedemikian :

class User extends Model
{

    //...

    public function cur_address(){
        return $this->hasOne('\App\Address')
            ->where('status',1);
    }

    public function old_addresses(){
        return $this->hasMany('\App\Address')
            ->where('status',0);
    }

}
comments powered by Disqus