我一直在使用 Laravel Eloquent,现在我想编写 RAW 查询并用它获取数据。
我的查询(雄辩)是这样的:
$jobs = CompanyJob::where('fair_id',$fair_id);
$jobs = $jobs->with('company');
// dd($jobs->toSql());
if (!empty($jobIds)) {
$jobs = $jobs->whereIn('id',$jobIds);
}
$jobs = $jobs->orderBy('id', 'ASC');
if(isset($search) && !empty($search))
$jobs = $jobs->where(function($query) use($search){
$query->where('title','LIKE','%'.$search.'%')->OrWhere('location','LIKE','%'.$search.'%');
});
if (!empty($limit)) {
$jobs = $jobs->limit($limit);
$jobs = $jobs->offset($offset);
}
$jobs = $jobs->get();
此查询的结果是:
{
"jobs": [
{
"id": 6381,
"company_id": "1507",
"fair_id": "118",
"recruiter_id": "147143",
"title": "Master of Arts in Entrepreneurship for the Global Hospitality and Tourism Industry",
"description": "<p><span style=\"font-weight: 400;\">Här kan du hitta mer information om utbildningen!</span><span style=\"font-weight: 400;\"><br /><br /></span></p>",
"job_type": "Permanent",
"language": "English",
"location": "Brig",
"contact_name": null,
"phone": null,
"url": "https://www.studentum.se/skola/swiss-education-group/cesar-ritz-colleges/master-of-arts-in-entrepreneurship-for-the-global-hospitality-and-tourism-industry-969435",
"salary": "Competitive",
"match": "1",
"status": null,
"params": null,
"is_imported": "N",
"questionnaires_template_id": "0",
"import_ref": null,
"imported_from": null,
"match_index": "N",
"last_offset": null,
"total_records_to_index": null,
"created_at": "2021-02-27 17:22:24",
"updated_at": "2021-02-27 17:22:24",
"company": {
"id": 1507,
"admin_id": null,
"fair_id": "118",
"recruiter_id": "147136",
"company_name": "Swiss Education Group",
"company_post_code": "111",
"company_state": "Göteborg",
"company_country": "Sverige",
"company_match": "1",
"company_web_url": "https://www.studentum.se/skola/swiss-education-group/",
"company_facebook_url": null,
"company_youtube_url": null,
"company_twitter_url": null,
"company_in_url": null,
"company_instagram_url": null,
"company_stand_type": "Bronze",
"description": "<p><span style=\"font-weight: 400;\">Vilka är vi?</span></p>\r\n<p> </p>\r\n<p><span style=\"font-weight: 400;\">Swiss Education Group (SEG) är en av världens ledande leverantörer av Hotell Management, kock -och konditorutbildningar i Schweiz. Våra utbildningar är till för studenter som vill ha en internationell karriär som hotellchef, kock, konditor eller något annat yrke inom just servicebranschen.</span></p>\r\n<p> </p>\r\n<p><span style=\"font-weight: 400;\">Vi driver totalt fyra skolor på olika campus i Schweiz:</span></p>\r\n<p><span style=\"font-weight: 400;\">- Swiss Hotel Management School</span></p>\r\n<p><span style=\"font-weight: 400;\">- Culinary Arts Academy Switzerland</span></p>\r\n<p><span style=\"font-weight: 400;\">- Hotel Institute Montreux</span></p>\r\n<p><span style=\"font-weight: 400;\">- César Ritz Colleges Switzerland</span></p>\r\n<p> </p>\r\n<p><span style=\"font-weight: 400;\">Samarbeten med branschen</span></p>\r\n<p> </p>\r\n<p><span style=\"font-weight: 400;\">Samtliga skolor som ingår i vårt nätverk, är akademiskt ackrediterade och har etablerade samarbeten med många av branschens ledande företag och varumärken. Några få exempel på samarbeten är: Four Seasons, Ritz Paris, Marriott International samt lyxrestauranger världen över. Detta ger studenten en utbildning som är direkt anknuten till vad den internationella hotellbranschen efterfrågar.</span></p>\r\n<p> </p>\r\n<p><span style=\"font-weight: 400;\">Swiss Education Group (SEG) är en av världens främsta nätverk av skolor inom 'hospitality management'. Nätverkets framgång har lett till att den internationella hotellbranschen nu ställer allt högre krav på sina medarbetare. Man kan verkligen säga att SEG har höjt ribban för kvaliteten på anställda inom hospitality management.</span></p>",
"company_logo": "assets/images/user-id-48854_SEG-logga.png",
"company_stand_image": "assets/images/user-id-48854_SEG-logga.png",
"company_stand_banner": "assets/images/user-id-48854_SEG-roll.jpg",
"dashboard_thumbnail": null,
"company_hall": "2",
"questionnaire_selected": "0",
"enable_recruiters": "1",
"enable_webinars": "0",
"enable_goodies": "0",
"enable_media": "1",
"enable_jobs": "1",
"enable_documents": "1",
"enable_about": "1",
"enable_auto_enrolled": "0",
"enable_poll": "0",
"display_order": "0",
"created_at": "2021-02-27 16:59:10",
"updated_at": "2021-02-27 16:59:10"
}
},
{
"id": 6480,
"company_id": "1521",
"fair_id": "118",
"recruiter_id": "147575",
"title": "Master of Arts in Entrepreneurship for the Global Hospitality and Tourism Industry",
"description": "<p><span style=\"font-weight: 400;\">Här kan du hitta mer information om utbildningen!</span><span style=\"font-weight: 400;\"> </span></p>",
"job_type": "Permanent",
"language": "English",
"location": "Brig",
"contact_name": null,
"phone": null,
"url": "https://www.studentum.se/skola/swiss-education-group/cesar-ritz-colleges/master-of-arts-in-entrepreneurship-for-the-global-hospitality-and-tourism-industry-969435",
"salary": "Competitive",
"match": "1",
"status": null,
"params": null,
"is_imported": "N",
"questionnaires_template_id": "0",
"import_ref": null,
"imported_from": null,
"match_index": "N",
"last_offset": null,
"total_records_to_index": null,
"created_at": "2021-03-01 00:39:05",
"updated_at": "2021-03-01 00:39:05",
"company": {
"id": 1521,
"admin_id": null,
"fair_id": "118",
"recruiter_id": null,
"company_name": "Swiss Education Group",
"company_post_code": "111",
"company_state": "Malmö",
"company_country": "Sverige",
"company_match": "1",
"company_web_url": "https://www.studentum.se/skola/swiss-education-group/",
"company_facebook_url": null,
"company_youtube_url": null,
"company_twitter_url": null,
"company_in_url": null,
"company_instagram_url": null,
"company_stand_type": "Bronze",
"description": "<p>Vilka är vi? <br /> <br /> Swiss Education Group (SEG) är en av världens ledande leverantörer av Hotell Management, kock -och konditorutbildningar i Schweiz. Våra utbildningar är till för studenter som vill ha en internationell karriär som hotellchef, kock, konditor eller något annat yrke inom just servicebranschen. <br /> <br /> Vi driver totalt fyra skolor på olika campus i Schweiz: <br /> - Swiss Hotel Management School <br /> - Culinary Arts Academy Switzerland <br /> - Hotel Institute Montreux <br /> - César Ritz Colleges Switzerland <br /> <br /> Samarbeten med branschen <br /> <br /> Samtliga skolor som ingår i vårt nätverk, är akademiskt ackrediterade och har etablerade samarbeten med många av branschens ledande företag och varumärken. Några få exempel på samarbeten är: Four Seasons, Ritz Paris, Marriott International samt lyxrestauranger världen över. Detta ger studenten en utbildning som är direkt anknuten till vad den internationella hotellbranschen efterfrågar. <br /> <br /> Swiss Education Group (SEG) är en av världens främsta nätverk av skolor inom 'hospitality management'. Nätverkets framgång har lett till att den internationella hotellbranschen nu ställer allt högre krav på sina medarbetare. Man kan verkligen säga att SEG har höjt ribban för kvaliteten på anställda inom hospitality management. <br /> </p>",
"company_logo": "assets/images/user-id-48854_SEG-logga.png",
"company_stand_image": "assets/images/user-id-48854_SEG-logga.png",
"company_stand_banner": "assets/images/user-id-48854_SEG-roll.jpg",
"dashboard_thumbnail": null,
"company_hall": "3",
"questionnaire_selected": "0",
"enable_recruiters": "1",
"enable_webinars": "0",
"enable_goodies": "0",
"enable_media": "1",
"enable_jobs": "1",
"enable_documents": "1",
"enable_about": "1",
"enable_auto_enrolled": "0",
"enable_poll": "0",
"display_order": "0",
"created_at": "2021-03-01 00:13:26",
"updated_at": "2021-03-01 00:13:26"
}
},
{
"id": 6520,
"company_id": "1528",
"fair_id": "118",
"recruiter_id": "147609",
"title": "Master of Arts in Entrepreneurship for the Global Hospitality and Tourism Industry",
"description": "<p><span style=\"font-weight: 400;\">Här kan du hitta mer information om utbildningen!</span> <span style=\"font-weight: 400;\"> </span></p>",
"job_type": "Permanent",
"language": "English",
"location": "Brig",
"contact_name": null,
"phone": null,
"url": "https://www.studentum.se/skola/swiss-education-group/cesar-ritz-colleges/master-of-arts-in-entrepreneurship-for-the-global-hospitality-and-tourism-industry-969435",
"salary": "Competitive",
"match": "1",
"status": null,
"params": null,
"is_imported": "N",
"questionnaires_template_id": "0",
"import_ref": null,
"imported_from": null,
"match_index": "N",
"last_offset": null,
"total_records_to_index": null,
"created_at": "2021-03-01 01:29:33",
"updated_at": "2021-03-01 01:29:33",
"company": {
"id": 1528,
"admin_id": null,
"fair_id": "118",
"recruiter_id": null,
"company_name": "Swiss Education Group",
"company_post_code": "111",
"company_state": "Stockholm",
"company_country": "Sverige",
"company_match": "1",
"company_web_url": "https://www.studentum.se/skola/swiss-education-group/",
"company_facebook_url": null,
"company_youtube_url": null,
"company_twitter_url": null,
"company_in_url": null,
"company_instagram_url": null,
"company_stand_type": "Bronze",
"description": "<p>Vilka är vi? <br /> <br /> Swiss Education Group (SEG) är en av världens ledande leverantörer av Hotell Management, kock -och konditorutbildningar i Schweiz. Våra utbildningar är till för studenter som vill ha en internationell karriär som hotellchef, kock, konditor eller något annat yrke inom just servicebranschen. <br /> <br /> Vi driver totalt fyra skolor på olika campus i Schweiz: <br /> - Swiss Hotel Management School <br /> - Culinary Arts Academy Switzerland <br /> - Hotel Institute Montreux <br /> - César Ritz Colleges Switzerland <br /> <br /> Samarbeten med branschen <br /> <br /> Samtliga skolor som ingår i vårt nätverk, är akademiskt ackrediterade och har etablerade samarbeten med många av branschens ledande företag och varumärken. Några få exempel på samarbeten är: Four Seasons, Ritz Paris, Marriott International samt lyxrestauranger världen över. Detta ger studenten en utbildning som är direkt anknuten till vad den internationella hotellbranschen efterfrågar. <br /> <br /> Swiss Education Group (SEG) är en av världens främsta nätverk av skolor inom 'hospitality management'. Nätverkets framgång har lett till att den internationella hotellbranschen nu ställer allt högre krav på sina medarbetare. Man kan verkligen säga att SEG har höjt ribban för kvaliteten på anställda inom hospitality management. <br /> </p>",
"company_logo": "assets/images/user-id-48854_SEG-logga.png",
"company_stand_image": "assets/images/user-id-48854_SEG-logga.png",
"company_stand_banner": "assets/images/user-id-48854_SEG-roll.jpg",
"dashboard_thumbnail": null,
"company_hall": "1",
"questionnaire_selected": "0",
"enable_recruiters": "1",
"enable_webinars": "0",
"enable_goodies": "0",
"enable_media": "1",
"enable_jobs": "1",
"enable_documents": "1",
"enable_about": "1",
"enable_auto_enrolled": "0",
"enable_poll": "0",
"display_order": "0",
"created_at": "2021-03-01 01:19:58",
"updated_at": "2021-03-01 01:19:58"
}
}
]
}
我想为此编写 RAW 查询,首先我使用了 $jobs->toSlq()但这并没有给我查询with() 所以我搜索并发现为此我必须使用
DB::enableQueryLog(); and DB::getQueryLog();
然后我得到以下结果:
array:2 [
0 => array:3 [
"query" => "select * from `company_jobs` where `fair_id` = ? and (`title` LIKE ? or `location` LIKE ?) order by `id` asc"
"bindings" => array:3 [
0 => "118"
1 => "%the%"
2 => "%the%"
]
"time" => 4.88
]
1 => array:3 [
"query" => "select * from `companies` where `companies`.`id` in (?, ?, ?)"
"bindings" => array:3 [
0 => "1507"
1 => "1521"
2 => "1528"
]
"time" => 0.27
]
]
我仍然无法理解如何编写查询以获取上述数据。我将如何在原始查询中获取 company.id 以及公司记录将如何与工作数据等相结合?谁能帮我在 RAW SQL 查询中编写 Eloquent 查询?我也想知道with()在 Laravel 中是如何工作的?
模型的关系是:
Job->belongsTo('Company') and
Company->hasMany('CompanyJob')