Mysql查询多行

时间:2018-01-12 22:05:10

标签: php mysql laravel laravel-5.4

我使用mysql 5.7skill_id数据库创建了一个项目。我在这个名为驱动程序和客户的项目中有两个角色。

在我的项目中,驾驶员可以选择多种技能并为每种技能添加多个标签,并且客户可以注册包含多个项目的订单。在order_items中,每个项目都可以绑定到一个技能和多个标签

注意:用户Group - Category - Subcategory - Item有4个部分skill_idG1-C2-S3的每个部分都解释了技能等级,例如{_ 1}}等skill_id意味着用户选择了此级别的所有项目,因为用户刚刚选择了三个级别

此技能用户中的另一个例子skill_id G5-C5-S2-T7刚刚选择了group5的category5的子类别2的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

Notic:处于注册顺序的用户可以为每个项目选择最后一级的skill_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();

0 个答案:

没有答案