php - Laravel:未获取所需数据

标签 php mysql laravel laravel-5.4 laravel-query-builder

我是 Laravel 新手,所以我不明白为什么这个查询只给我一个用户结果,而不是包含 posts.titleposts.description 的所有条目。这应该是一个搜索表达式 (%for%) 并使用特定类别 (get)。

DB::table('posts')
->join('users', 'users.id', '=', 'posts.user_id')
->join('locations', 'users.id', '=', 'locations.id')
->join('main_categories', 'main_categories.id', '=', 'posts.main_category_id')
->select('posts.*', 'users.*', 'locations.address', 'main_categories.name as cat', DB::raw('ROUND((6371 * ACOS(COS(RADIANS(31.430443800000003)) * COS(RADIANS(locations.lattitude)) * COS(RADIANS(locations.longitude) - RADIANS(74.280726)) + SIN(RADIANS(31.430443800000003)) * SIN(RADIANS(locations.lattitude)))),2) AS DISTANCE'))
->where([['posts.title','like','%for%'],['main_categories.name', '=', 'get']])
->orwhere([['posts.description','like','%for%'],['main_categories.name', '=', 'get']])
->get();

我正在尝试将此 MySQL 查询转换为 Laravel 格式。这个 MySQL 查询给了我 3 行,其中 2 行是一个用户的,1 行是另一个用户的。但在 Laravel 中我只得到一个用户行。

SELECT
  posts.title,
  posts.description,
  posts.sub_category_id,
  posts.image,
  posts.created_at,
  posts.main_category_id,
  posts.user_id,
  locations.address,
  ROUND(
    (
      6371 * ACOS(
        COS(RADIANS(31.430443800000003)) * COS(RADIANS(locations.lattitude)) * COS(
          RADIANS(locations.longitude) - RADIANS(74.280726)
        ) + SIN(RADIANS(31.430443800000003)) * SIN(RADIANS(locations.lattitude))
      )
    ),
    2
  ) AS DISTANCE
FROM
  posts
INNER JOIN
  users ON posts.user_id = users.id
INNER JOIN
  locations ON users.location_id = locations.id
INNER JOIN
  main_categories ON main_categories.id = posts.main_category_id
WHERE
  (
    (
      posts.title LIKE '%for%' OR posts.description LIKE '%for%'
    ) AND(main_categories.name = 'Get')
  )

最佳答案

您在 Laravel 查询中使用了无效的联接。而不是

->join('locations', 'users.id', '=', 'locations.id')

应该是

 ->join('locations', 'users.location_id', '=', 'locations.id')

因为在您的原始查询中您使用:

INNER JOIN
  locations ON users.location_id = locations.id

关于php - Laravel:未获取所需数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43693873/

相关文章:

javascript - 如何在 PHP foreach 中使用 ajax?

mysql - 如何在 Laravel 4 中初始化用户定义的 MySQL 变量?

mysql - Docker-Compose - 无法使用命令 --init-file 初始化 MySQL 数据库

Mysql选择两列不具有相同值的行

php - Laravel 电子邮件验证链接不起作用?

php - Laravel 保存()未定义

javascript - vm.$set 和 Vue.set 有什么区别?

php - 停止直接访问 (.htaccess) 并允许对子文件夹的 ajax 请求

php - 有没有人有完全重新编码 Wordpress 管理部分布局的经验?

php - 使用不同域对网站进行负载平衡