在Laravel中提取关系数据



我正在尝试在laravel 5.4中构建一个小应用程序,其中我的contacts表,companies表,interactions表和users表都带有各自的模型。Interaction正在创建User,其中有client_contactcontactuser参与。每个client_contact并联系人共享相同的模型,并且属于一家在其专栏中类型的公司,例如投资者,研究,公司等。现在,我正在尝试生成一份报告,其中用户与投资者进行了互动。首先,让我向您展示我的模型:

用户模型:

class User extends Authenticatable
{
    use HasApiTokens, Notifiable, SoftDeletes;

    public function interactions()
    {
        return $this->hasMany('AppInteraction');
    }
    public function clients()
    {
        //Each user has been assigned a particular client 
        return $this->belongsToMany('AppCompany', 'company_user', 'user_id', 'company_id');
    }
}

联系人模型:

class Contact extends Model
{
    use SoftDeletes, DataViewer;
    public function company()
    {
        return $this
            ->belongsToMany('AppCompany', 'company_contact','contact_id', 'company_id')->withTimestamps();
    }
    public function interactions()
    {
        return $this->belongsToMany('AppInteraction', 'contact_interaction','contact_id', 'interaction_id');
    }
    public function clientInteractions()
    {
        return $this->belongsToMany('AppInteraction', 'contact_client_interaction','contact_id', 'interaction_id');
    }
}

公司模型:

class Company extends Model
{
    use SoftDeletes, DataViewer;
    public function contacts()
    {
        return $this->belongsToMany('AppContact', 'company_contact', 'company_id','contact_id');
    }
    public function users()
    {
        return $this->belongsToMany('AppUser', 'company_user', 'company_id', 'user_id')->withTimestamps();
    }
}

交互模型:

class Interaction extends Model
{
    use SoftDeletes;
    public function stellarParticipants()
    {
        return $this->belongsToMany('AppUser')->withTimestamps();
    }
    public function clientsAssociation()
    {
        return $this->belongsToMany('AppContact', 'contact_client_interaction',  'interaction_id', 'contact_id')->withPivot('company_id')->withTimestamps();
    }
    public function contactsAssociation()
    {
        return $this->belongsToMany('AppContact', 'contact_interaction',  'interaction_id', 'contact_id')->withPivot('company_id')->withTimestamps();
    }
    public function user()
    {
        return $this->belongsTo('AppUser');
    }
}

现在在我的 reportcontroller中:我正在做这样的事情:

 public function getAnalystInvestor(Request $request)
{
    $user = User::find($request->id);
    $interactions = Interaction::whereHas('contactsAssociation', function ($query3) {
        $query3->whereHas('company', function ($query4) {
            $query4->where('type', 'like', '%'.'Investor'.'%');
        });
    })->whereHas('user', function ($query1) use($user) {
        $query1->where('name', '=', $user->name);
    })->orWhereHas('stellarParticipants', function ($query2) use($user) {
        $query2->where('name', '=', $user->name);
    })
    ->orderBy('created_at', 'desc')
    ->take(50)
    ->with(['contactsAssociation', 'clientsAssociation', 'stellarParticipants'])
    ->get();
    return response()->json(['interactions' => $interactions], 200);
}

但我无法获得预期的结果,但仍显示一些数据不是投资者的数据。我也尝试了:

$interactions = Interaction::whereHas('user', function ($query1) use($user) {
        $query1->where('name', '=', $user->name);
    })->orWhereHas('stellarParticipants', function ($query2) use($user) {
        $query2->where('name', '=', $user->name);
    })->whereHas('contactsAssociation', function ($query3) {
        $query3->whereHas('company', function ($query4) {
            $query4->where('type', 'like', '%'.'Investor'.'%');
        });
    })

首先分配了用户过滤器但未根据需要显示其。帮助我。

您应该能够链接查询,类似于此:

$cfs = AppService::with('items', 'required_services', 'supported_services')
        ->where(function ($query) {
            $query->where('stm', 11)
                ->orWhere('stm', 17)
                ->orWhere('stm', 31);
        })
        ->where('lifecycle_id', '!=', 12)
        ->where('type', 'Customer Facing')
        ->orderBy('service_full_name')
        ->get();

我不太了解您正在开发的报告,但希望这对您有所帮助。

最新更新