我正在尝试在laravel 5.4
中构建一个小应用程序,其中我的contacts
表,companies
表,interactions
表和users
表都带有各自的模型。Interaction
正在创建User
,其中有client_contact
,contact
,user
参与。每个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();
我不太了解您正在开发的报告,但希望这对您有所帮助。