简体   繁体   中英

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

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 eg:

$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 eg:

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

In your model data_storage you can define a property / method entity_states to get them:

class data_storage extends Model
{
    public function entity_states()
    {
        return $this->hasMany('App\entity_states','data_storage_id')->where('state_id ','=',$this->table());
    }
}

Then you can access them in an instance by

$entityStatesOfDataStorage = $yourDataStorageInstance->entity_states;

See this link: https://laravel.com/docs/5.3/eloquent-relationships

for Query Builder you may use this:

DB::table('data_storage')
    ->join('entity_states','data_storage.data_storage_id','=','entity_states.state_id')
    ->get();

For your reference Laravel Query Builder

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM