我创建了一个项目 laravel 5.4
以及 mysql 5.7
数据库。我在这个项目中有两个角色,分别是driver和customer。
在我的项目中,一个驱动程序可以选择多个技能,并为每个技能添加多个标记,而客户可以注册一个包含多个项目的订单。为了获得物品,每个物品可以绑定到一个技能和多个标签
注意:用户 skill_id
有四个部分 Group - Category - Subcategory - Item
每一部分 skill_id
举例说明技能等级 G1-C2-S3
因为用户刚刚选择了三个级别,所以表示用户选择了该级别的所有项目
另一个例子是技能id G5-C5-S2-T7
在这个技能中,用户刚刚选择了group5的category5的subcategory2的item7
注意:用户 skill_id
水平部件不固定
用户技能表如下:
skill_id user_id
________________________
G1-C2-S3 2
G2-C4 2
G5-C5-S2-T7 2
用户技能标签表
skill_id user_id tag
_______________________________
G1-C2-S3 2 nice
G1-C2-S3 2 good
G1-C2-S3 2 bad
G2-C4 2 xxx
G2-C4 2 yyy
G5-C5-S2-T7 2 zz
G5-C5-S2-T7 2 jjj
订单表为:
id title
________________
3 egergr
3 ergervv
3 ergerger
订单项目表为:
item_id order_id tags
__________________________________
G1-C2-S3-t2 3 nice
G2-C4-S6-t3 3 yyy
G5-C5-S2-T7 3 zz
注意:按注册顺序排列的用户可以为每个项目选择最后一级技能\u id item_id
永远是技能的4部分,它是固定的
如何编写一个查询,将客户订单绑定到具有匹配技能的驱动程序,并将其标记绑定到订单项目和其标记?
我写了下面的代码,但不工作
$skills = UsersSkills::with('tags')->where('user_id',$biker_id)->get();
$revisions = function ($query) use($skills)
{
foreach($skills as $skill)
{
$tags = ($skills[0]['tags']->toArray() !== []) ? $skills[0]['tags']->toArray() : null;
$tags_values = (!is_null($tags)) ? array_column($tags, 'tag') : null;
$query->where('item_id','LIKE',$skills[0]['skill_id'].'%')->whereIn('tags',$tags_values);
}
};
$orders = Order::whereHas('order_items', $revisions)->where(function($query) use($maxLat,$minLat,$maxLon,$minLon,$biker_search_time,$estimation_id) {
$query->where('done_by_expert',1);
$query->whereBetween('destination_longitude', [$minLon, $maxLon]);
$query->whereBetween('destination_latitude',[$minLat,$maxLat]);
$query->where('status','=','pending');
$query->where('type','=',NULL);
$query->where('vehicle_type_id',$estimation_id);
$query->whereNull('favorites');
$query->where('created_at','>=',Carbon::now()->subMinute($biker_search_time));
})->get();
暂无答案!
目前还没有任何答案,快来回答吧!