dongshan1811 2014-08-22 23:37
浏览 215

Laravel加入与DB :: Raw无法正常工作

So the error I am getting is SQLSTATE[42S02]: Base table or view not found: 1109 Unknown table 'team_members' in field list

So it seems the join in not actually happening. Does anyone see the problem in the code?

$data = DB::select(DB::raw('
                Select
                  team_members.name As teamMemberName,
                  Sum(TimestampDiff(minute, production_hours.time_start,
                  production_hours.time_stop)) / 60 As hoursWorked,
                  production_activities.name As groupName,
                  production_hours.team_member_id,
                  production_hours.production_activities_id,
                  production_hours.hourly_rate
                  '))
              ->join('production_days', 'production_hours.production_day_id', '=', 'production_days.id')
              ->join('production_activities', 'production_hours.production_activities_id', '=', 'production_activities_id')
              ->where('DATE(production_day.begin)', '>', $beginDate)
              ->where('DATE(production_day.begin)', '<', $endDate)
              ->groupBy('team_members.name')
              ->groupBy('production_activities.name')
              ->get();

EDIT:

Mark Baker pointed out I never specified the table. The correct query(with a couple other bugs fixed):

$data = DB::table('production_days')->select(DB::raw('
                  team_members.name As teamMemberName,
                  Sum(TimestampDiff(minute, production_hours.time_start,
                  production_hours.time_stop)) / 60 As hoursWorked,
                  production_activities.name As groupName,
                  production_hours.team_member_id,
                  production_hours.production_activities_id,
                  production_hours.hourly_rate
                  '))
              ->join('production_hours', 'production_hours.production_day_id', '=', 'production_days.id')
              ->join('production_activities', 'production_hours.production_activities_id', '=', 'production_activities_id')
              ->join('team_members', 'production_hours.team_member_id', '=', 'team_members.id')
              ->where(DB::raw('DATE(`production_days`.`begin`)'), '>', $beginDate)
              ->where(DB::raw('DATE(`production_days`.`begin`)'), '<', $endDate)
              ->groupBy('team_members.name')
              ->groupBy('production_activities.name')
              ->get();
  • 写回答

1条回答 默认 最新

  • drl9940 2014-08-23 05:59
    关注

    Best Example use it with all possible example

    e.g.

        $issueitems = \DB::table('products_items')->where("products_items.deleted", "0");
        $data=$issueitems->select(array(
                    "itemcategories.name as itemcategoryname",
                    "itemsubcategories.name as itemsubcategoryname",
                    "items.name as itemsname",
                    "items.id as item_id",
                    "products_items.stock as stock",
                    "measureds.name as measureds",
                    \DB::raw("COALESCE(issue_stock.price,0) as price"),
                    \DB::raw("COALESCE(issue_stock.iquantity,0) as issuequantity")))
                ->join("products", function($join) {
                    $join->on('products.id', '=', 'products_items.product_id')
                    ->on("products.deleted", "=", "products_items.deleted");
                })
                ->join("items", "items.id", "=", "products_items.item_id")
                ->join("itemcategories", "itemcategories.id", "=", "items.item_category_id")
                ->join("itemsubcategories", "itemsubcategories.id", "=", "items.item_subcategory_id")
                ->join("measureds", "measureds.id", "=", "items.measured_id")
                ->leftjoin(
                        \DB::raw('(SELECT 
                                productissues.product_id,itemstocks.item_id,sum(productissue_items.quantity) as iquantity
                                ,sum(itemstocks.price * (COALESCE(productissue_items.quantity,0))) as price
                                FROM 
                                productissues
                                    INNER JOIN productissue_items ON productissues.id = productissue_items.productissues_id
                                    INNER JOIN itemstocks ON itemstocks.id = productissue_items.itemstock_id
                                    WHERE itemstocks.deleted = "0" AND productissue_items.deleted = "0"
                                    group by productissues.product_id,itemstocks.item_id
                                ) issue_stock'), function($join) {
                    $join->on("issue_stock.product_id", "=", "products_items.product_id")
                    ->on("issue_stock.item_id", "=", "products_items.item_id");
                })->get();
    
    评论

报告相同问题?

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b