Search code examples
phpeloquentlaravel-5.3

How to apply relationship with two id's in laravel


So I have a model called data_storage and another model entity_states

I have to fetch the record from data_storage with entity_states where entity_state has data_storage_id and state_id.

How can I use eloquent to achieve this ?.

Or Ill have to use Query builder and use innerJoin?

Update1

My Actual Query

$this->values['new_leads'] = $data_storages->with('actions','states','sla')->where('wf_id',$wfid)->get();

My data_storage modal

class data_storages extends Model
{
    //
    protected $fillable = ['layout_id','member_id','company_id','team_id','data','status','wf_id'];



    function actions()
    {
        return $this->hasMany('App\Models\ActionDataMaps', 'data_id', 'id' );
    }

    function states()
    {
        return $this->hasOne('App\Models\workflow_states','id','status');
    }

    function sla()
    {
       //Here I have to get those row from entity_states model where , data_storage_id and state_id 
    }
}

Thanks


Solution

  • Here's the more reasonable way to do it:

    class DataStorage extends Model { 
         public states() {
             return $this->belongsToMany(State::class,"entity_states");
         }
    }
    
    class State extends Model {
         public storages() {
             return $this->belongsToMany(DataStorage::class,"entity_states");
         }
    }
    

    Then you can eager-load related models via e.g.:

    $storage = DataStorage::with("states")->first();
    $storage->states->first()->column_in_related_state;
    

    Or via the state:

    $state = State::with("storages")->first();
    $state->storages->first()->column_in_related_storage;
    

    If there are additional columns in the pivot table entity_states then you can refer to them in the relationship as e.g.:

    public states() {
        return $this->belongsToMany(State::class)->withPivot("pivot_column");
    }