2014-11-02 132 views
1

我的MySQL查询是转换MySQL查询到Laravel 4.2查询

SELECT DISTINCT `car`.`car_maker` as `brand`, `car`.`car_model` AS `model`, `available_car`.`car_price` AS `price`, `car`.`car_production_year` AS `year`, `available_car`.`car_id` AS `car_id`,`available_car`.`id` AS `id`, `available_car`.`current_position` AS `current_position` 
    FROM `car`, `available_car`, `users` 
     WHERE `available_car`.`car_id`=`car`.`car_id` 
      AND `available_car`.`is_sold` = 'no' 
      AND `available_car`.`created_at` BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
       ORDER BY WEEK(`available_car`.`created_at`) DESC, 
         `available_car`.`car_price`DESC, 
         `users`.`last_paid_date` DESC, 
         `available_car`.`created_at` DESC 

我怎样才能把它转换使用Laravel查询生成器?

我想拥有像这种类型的查询 -

$info = DB::table('car` , `available_car`, `users') 
      ->select('car.car_maker', 'car.car_model', 'available_car.car_price', 'car.car_production_year', 'available_car.car_id','available_car.id', 'available_car.current_position') 
      ->get(); 

但它无法正常工作。

我的数据库是这样

enter image description here

谁能帮助我吗?

回答

1

尝试此查询:

DB::table('car') 
->join('available_car', 'car.car_id', '=', 'availabe_car.car_id') 
->join('users', 'available_car.user_id', '=', 'users.id') 
->where('available_car.is_sold', 'no') 
->whereRaw('available_car.created_at BETWEEN NOW() - INTERVAL 30 DAY AND NOW()') 
->orderByRaw('WEEK(`available_car`.`created_at`) DESC') 
->orderBy('available_car.car_price', 'desc') 
->orderBy('users.last_paid_date', 'desc') 
->orderBy('available_car.created_at', 'desc') 
->select('car.car_maker as brand', 'car.car_model as model', 'available_car.car_price as price', 'car.car_production_year as year', 'available_car.car_id as car_id', 'available_car.id as id', 'available_car.current_position as current_position') 
->distinct()->get() 

注意,这是未经测试的代码。

+0

感谢您从(选择UPDATE_ID,计数(UPDATE_ID)帮助 – 2014-11-02 14:19:28

+0

选择d1.update_id从updates_tags克拉,其中TAG_ID在(67,33,86,55)group by update_id)as d1 where d1.ct = 4 如何将其转换为laravel查询....? – Ankit 2016-03-30 13:00:15

+0

@Ankit请将您的问题作为单独的问题发布。评论是针对后续问题和讨论 – lukasgeiter 2016-03-30 13:28:57

1

您不能将多个表传递给select,因为它们将作为整体转义。由于使用内为@ lukasgeiter的解决方案替代连接,你可以使用DB::rawtable()

DB::table(DB::raw('`car` , `available_car`, `users`')) 
    ->select('car.car_maker', 'car.car_model', 'available_car.car_price', 'car.car_production_year', 'available_car.car_id', 'available_car.id', 'available_car.current_position') 
    ->where('available_car.car_id', '`car`.`car_id`') 
    ->where('available_car.is_sold', 'no') 
    ->whereRaw('`available_car`.`created_at` BETWEEN NOW() - INTERVAL 30 DAY AND NOW()') 
    ->orderByRaw('WEEK(`available_car`.`created_at`) DESC') 
    ->orderBy('available_car.car_price', 'desc') 
    ->orderBy('users.last_paid_date', 'desc') 
    ->orderBy('available_car.created_at', 'desc') 
    ->distinct() 
    ->get(); 
+0

你用'DB :: raw'你可以做几乎所有的事情。尽管我更喜欢加入;) – lukasgeiter 2014-11-02 14:00:15

+1

@lukasgeiter我更喜欢加入。我只提供它作为替代方案,因为这会对问题中发布的问题建立相同的查询。 – Bogdan 2014-11-02 14:12:42

+0

非常感谢 – 2014-11-02 14:18:46