Php 如何应用与两个id的关系';在拉雷维尔
因此,我有一个名为Php 如何应用与两个id的关系';在拉雷维尔,php,eloquent,laravel-5.3,Php,Eloquent,Laravel 5.3,因此,我有一个名为数据\存储的模型和另一个名为实体\状态 我必须从数据存储和实体状态获取记录,其中实体状态具有数据存储id和状态id 我怎样才能用雄辩来达到这个目的 或者我必须使用查询生成器和innerJoin 更新1 我的实际问题 $this->values['new_leads'] = $data_storages->with('actions','states','sla')->where('wf_id',$wfid)->get(); 我的数据存储模式 class
数据\存储
的模型和另一个名为实体\状态
我必须从数据存储
和实体状态
获取记录,其中实体状态具有数据存储id
和状态id
我怎样才能用雄辩来达到这个目的
或者我必须使用查询生成器和innerJoin
更新1
我的实际问题
$this->values['new_leads'] = $data_storages->with('actions','states','sla')->where('wf_id',$wfid)->get();
我的数据存储
模式
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
}
}
感谢使用查询生成器,您可以使用:
DB::table('data_storage')
->join('entity_states','data_storage.data_storage_id','=','entity_states.state_id')
->get();
为了便于参考,您可以在模型
数据存储中定义属性/方法实体状态
,以获取它们:
class data_storage extends Model
{
public function entity_states()
{
return $this->hasMany('App\entity_states','data_storage_id')->where('state_id ','=',$this->table());
}
}
然后,您可以通过以下方式在实例中访问它们:
$entityStatesOfDataStorage = $yourDataStorageInstance->entity_states;
请参阅此链接:
以下是更合理的方法:
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");
}
}
然后,您可以通过以下方式查看与负载相关的模型:
$storage = DataStorage::with("states")->first();
$storage->states->first()->column_in_related_state;
或通过州政府:
$state = State::with("storages")->first();
$state->storages->first()->column_in_related_storage;
如果透视表中有其他列,则可以在关系中引用它们,例如:
public states() {
return $this->belongsToMany(State::class)->withPivot("pivot_column");
}
查看@apokryfos上的文档你能建议使用哪种关系吗?我尝试了hasOne,但它只适用于一个IDF。首先,你需要了解你实际拥有的关系<代码>数据存储
是一个模型,状态
是另一个模型entity\u states
是一个数据透视表,因此在data\u storage
和states之间有一个多对多的关系,您所说的是两个实体、表、数据存储和状态之间的多对多关系。如果您的数据库架构有另一个结构,您可能需要重新考虑它的结构。@Vikram checkout apokryfos answer.hasMany将不起作用,因为我必须获取那些实体状态,其中数据、存储id和状态id匹配。对不起,我在最初的帖子中没有得到这些。请看我的编辑。我在谷歌上搜索过,所以代码没有经过测试。但它得到了一些积极的反馈。请让我知道,如果它对你有效。我知道这将有效,但我正在寻找雄辩的answer@Vikram对不起,我的错。如果是这样的话,那么dns_nx的答案就是正确的。不,他的答案是错误的,因为关系不是HasManyAlso,所以应该找到一个透视表。谢谢让em修复这个问题changes@apokryfos在我的数据存储表中,状态列被调用,状态
如果您将数据存储
与状态
直接关联,并通过实体状态
关联,则这是两种不同的关系。此代码仅适用于使用透视表的多对多用户。直接一对多是一对多的,需要以不同的方式定义(这只会引起有关您的设计的更多问题)