2015-02-09 2 views
1

Я столкнулся с той странной проблемой, с которой я столкнулся, и это действительно сильно меня озадачило. Я использую laravel для создания своего веб-сайта, и я только что написал сценарий для работы в качестве поисковой системы. Он построен, а затем запускается.запрос laravel не возвращает значения - странный pdo


Я просто запустить $query->get() с $query есть класс Laravel строитель. Это содержание запроса:


select * from (
    select `l`.*, round(
     d.distance_unit 
     * DEGREES(ACOS(COS(RADIANS(p.latitude)) 
     * COS(RADIANS(z.latitude)) 
     * COS(RADIANS(p.longitude - z.longitude)) 
     + SIN(RADIANS(p.latitude)) 
     * SIN(RADIANS(z.latitude)))), 
      2 
    ) AS distance, `d`.`radius` from `listings` as `l` 
    inner join `horses` as `x` on `x`.`id` = `l`.`listing_id` 
    inner join `suburbs` as `z` on `z`.`id` = `l`.`suburb_id` 
    inner join (select 50 as radius, 111.045 as distance_unit) as d on 1 = 1 
    inner join `suburbs` as `p` on `p`.`id` = 1 
    where (
     `z`.`latitude` between 
      ? 
      and 
      ? 
     and `z`.`longitude` between 
      ? 
      and 
      ? 
    ) 
) as sub 
where `distance` <= `radius` 
order by `created_at` desc 
limit 9 offset 0 

привязки запрос:

[bindings] => Array 
    (
     [0] => Illuminate\Database\Query\Expression Object 
      (
       [value:protected] => p.latitude - (d.radius/d.distance_unit) 
      ) 

     [1] => Illuminate\Database\Query\Expression Object 
      (
       [value:protected] => p.latitude + (d.radius/d.distance_unit) 
      ) 

     [2] => Illuminate\Database\Query\Expression Object 
      (
       [value:protected] => p.longitude - (d.radius/(d.distance_unit * COS(RADIANS(p.latitude)))) 
      ) 

     [3] => Illuminate\Database\Query\Expression Object 
      (
       [value:protected] => p.longitude + (d.radius/(d.distance_unit * COS(RADIANS(p.latitude)))) 
      ) 

    ) 

То есть запрос руководит Laravel. Когда я печатаю sql. но я не могу, чтобы жизнь меня работала, почему она не возвращает значение, когда я запускаю sql в phpmyadmin. (Все, что я делаю, это добавить привязки к вопросительным знакам, а затем запустить в phpmyadmin). Ive приходит к выводу, что PDO laravels должен делать что-то по-другому или присоединяться к ним по-разному. Я использую метод DB::raw() для каждого из этих значений.

+1

Попробуйте распечатать запрос через print_r (DB :: getQueryLog()), см., Какой запрос генерирует –

+0

laravel, похоже, не печатает точный запрос. вышеуказанный контент - это то, что было получено из 'DB :: getQueryLog()'. Кажется, он просто отображает запрос и привязки отдельно, что является самой большой болью в моей жизни. ха-ха. Я прочитал это. Его из-за ** PDO ** класса. Он отправляет его на сервер sql как запрос и привязки. поэтому его в принципе невозможно определить запрос, который запустил ...:/ –

+1

Я бы предложил попробовать ** Clockwork **. Вам необходимо установить пакет [composer package] (https://github.com/itsgoingd/clockwork) и либо [Расширение Chrome] (https://chrome.google.com/webstore/detail/clockwork/dmggabnehkmmfmdffgajcflpdjlnoemp) (это мое предложение) или [внедряемая версия webapp] (https://github.com/itsgoingd/clockwork-web). Это позволит вам отлаживать что угодно, в том числе ваши SQL-запросы, и отображает точные запросы, выполняемые с базой данных (а не запросы с «?», Где должны быть привязанные данные). – Bogdan

ответ

2

Мне удалось найти свою проблему, настроив my.ini для сервера mysql. Я повернул general_log_file = "queries.log" под [mysqld]на. Затем запустите SET global general_log = 1; в mysql.


Это показало мне проблему с моим запросом. Связи вставлялись в кавычки, хотя я использовал DB::raw(). Поэтому мне просто нужно понять, как их удалить.

+0

Я изменил '$ query-> whereBetween()' на '$ query-> whereRaw()' и просто написал основной код –

+0

Рассмотрите возможность принятия собственного ответа. – sepehr

Смежные вопросы