【问题标题】:Convert MySQL Query to Laravel 4.2 Query将 MySQL 查询转换为 Laravel 4.2 查询
【发布时间】:2014-11-02 12:50:46
【问题描述】:

我的 MySQL 查询是

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();

但它不起作用。

我的数据库是这样的

谁能帮帮我?

【问题讨论】:

    标签: php mysql laravel laravel-4


    【解决方案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()
    

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

    【讨论】:

    • select d1.update_id from (select update_id, count(update_id) as ct from updates_tags where tag_id in (67,33,86,55) group by update_id) as d1 where d1.ct=4 How将其转换为 laravel 查询....?
    • @Ankit 请将您的问题作为单独的问题发布。评论用于后续问题和讨论
    • @lukasgeiter 我无法提出那个新问题,出了点问题...stackoverflow.com/questions/36260657/…您可以在这里回答...这是我的问题...请回答。
    【解决方案2】:

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

    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();
    

    【讨论】:

    • 是的,DB::raw 几乎可以做任何事情。不过我更喜欢加入;)
    • @lukasgeiter 我也更喜欢加入。我只提供它作为替代方案,因为这会构建与问题中发布的查询相同的查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多