锐客网

Laravel多表连接,多个查询(Eloquent)

1.(写此文章理由) 最近工作用laravel ,然而我不会laravel,工作快四年了,初次使用compose,初次使用git,学习laravel。工作这次做一个查询,如图下,本来下SQL的话很快,但是用Eloquent
Laravel多表连接,多个查询(Eloquent)
文章图片
2.要写的sql ,用Eloquent
select crm_prospect_profiles.phone_mobile,
crm_prospect_profiles.email ,
crm_tasks.name,
crm_prospect_childs.birthdate,
dm_courses.title
from crm_prospects
left join crm_prospect_childs on crm_prospects.child_id=crm_prospect_childs.id
left join crm_tasks on crm_tasks.assigned_user_id=crm_prospects.assigned_user_id
left join crm_prospect_profiles on crm_prospect_profiles.id=crm_prospects.profile_id
left join enrolled_students on enrolled_students.student_id=crm_prospect_childs.id
left join dm_associated_courses on dm_associated_courses.id=enrolled_students.associated_course_id
left join dm_courses on dm_courses.id=dm_associated_courses.course_id
where
(crm_prospect_profiles.phone_mobile like '%157%'
or crm_prospect_profiles.email like '%26@qq.com%' )
and dm_courses.id=''
and crm_prospect_childs.birth>$bigenDate
and crm_prospect_childs.birth<$endDate
and crm_tasks.name=''
这个地方把我难住了,在主模型,关联太多从模型,而且从模型的字段做查询筛选
(模型关系怎么写这里不说了哈)
一 初步 :实现主表连接从表,从表做查询筛选

$crm_prospects = CrmProspect::whereHas('profile', function ($q) use ($keyword) { $q->where('phone_mobile', 'like', '%' . $keyword . '%'); $q->orWhere('email', 'like', '%' . $keyword . '%'); })->get();

先掌握这个再看下面的(文档中可以学)。
但是呢,从表连表 再连表呢,妈蛋,怎么玩
二 进入问题难点
我的处理方法是 在function中写function,嵌套function,最后好了(我只能说,我不知道其他方法了)。
上代码
public function searchCrmProspects($age,$birStartDate,$birEndDate,$course_id,$lastAction,$keyword) { $crm_prospects = CrmProspect::whereHas('profile', function ($q) use ($keyword) { $q->where('phone_mobile', 'like', '%' . $keyword . '%'); $q->orWhere('email', 'like', '%' . $keyword . '%'); }); if(!empty($age)){ $crm_prospects->wherehas('child', function ($q) use ($birStartDate,$birEndDate) { $q->where('birthdate', '>',$birStartDate); $q->where('birthdate', '<=',$birEndDate); }); }if(!empty($course_id)){ $crm_prospects->wherehas('child', function ($q) use ($course_id) { $q->wherehas('enrolledStudents', function ($q) use ($course_id){ $q->wherehas('associatedCourse', function ($q) use ($course_id){ $q->wherehas('dmCourse', function ($q) use ($course_id){ $q->where('id', '=',$course_id); } ); } ); } ); }); }if (!empty($lastAction)){ $crm_prospects->wherehas('tasks', function ($q) use ($lastAction) { $q->where('name', '=', $lastAction); }); }return $crm_prospects->get(); }

有问题加 QQ:269074092
【Laravel多表连接,多个查询(Eloquent)】



    Laravel