如何使用laravel eloquent进行此关系查询?

时间:2017-11-26 05:55:11

标签: laravel eloquent

2017年11月27日上午7:24:
更新:稍微改变需求并需要一些帮助:
How to write this query in laravel query builder or eloquent or sql?

将此问题留待此处参考。
谢谢你的回答。

我在广告系列和用户之间建立了多对多的关系。

Campagin.php

public function users()
{
  return $this->belongsToMany('App\User');
}

user.php的

public function campaigns()
{
  return $this->belongsToMany('App\Campaign');
}

我有一个针对这种关系的数据透视表:campaign_user,它只有2列campaign_iduser_id

接下来,我在广告系列和标记之间建立了一对多的关系 1个广告系列有很多标记

Campaign.php

public function markers()
{
  return $this->hasMany('App\Marker', 'campaign_id');
}

Marker.php

public function campaign()
{
  return $this->belongsTo('App\Campaign', 'campaign_id');
}

现在,在此网址/campaign/2/marker中,我希望获得属于当前用户的广告系列2下的所有标记。

如何使用eloquent来实现这一目标?

在SQL中大致如下:

select * from markers where campaign_id in (select campaign_id from campaigns 
left join campaign_user on (campaigns.id = campaign_user.campaign_id)
where campaign_user.campaign_id = 2 and campaign_user.user_id = 3);

2 个答案:

答案 0 :(得分:0)

首先检查您的exists用户下的广告系列current

$campaign = Campaign::where('id','=',$campaign_id)->whereHas('users',function($q){
        $q->where('id','=',$user_id);
    })->first();

然后使用Marker -

获取所有Campaign
    if($campaign!=null){
        Marker::where('campaign_id','=',$campaign->id)->with('campaign')->get();
    }

答案 1 :(得分:0)

使用嵌套select * from funcionario where nome = 'marcio' and numero = '1234'; ,如下所示:

ID_funcionario  nome    numero  sexo    morada    email     data_nasc
----------------------------------------------------------------------
1              marcio   1234    male    jardim    marcio    11/23/2017