【问题标题】:orderBy attributes of another table in LaravelLaravel 中另一个表的 orderBy 属性
【发布时间】:2017-06-07 10:34:33
【问题描述】:

在我的网站上,我允许用户上传图片/喜欢的图片/喜欢的图片/等等。

因此,我有一张用于存放图片、喜欢、收藏等的表格。

我可以很好地获取和显示这些图像,并按我喜欢的方式对它们进行排序

$images = Images::orderBy('id', 'desc')->Paginate(50);  

我还可以显示一张图片有多少喜欢/收藏。

$favCount = Favorite::where('image_id', $image->id)->count();

但是,我应该如何对图像进行排序,例如,它们有多少收藏?我有一个最喜欢的模型和一个图像模型,但我不知道该怎么做。

编辑:

当前查询给出的答案:

$images = Images::join('favorites', 'favorites.image_id', '=', 'images.id')
->select('images.link', DB::raw('count(favorites.id) as favs'))
->orderBy('favs', 'desc')
->groupBy('images.link')
->take(10)
->get();        

错误是:

SQLSTATE[42S22]:未找到列:1054 '字段列表'中的未知列'图像'(SQL:选择images,计数(favorites.id)作为来自images的收藏夹@内连接favorites@ 987654327@.image_id = images.id group by images.link order by favs desc limit 10)

【问题讨论】:

  • 您是否像我一样使用DB 尝试过?我认为错误来自Images::raw()。尝试将Images::raw 替换为DB::raw()。或者像我一样使用DB 进行所有查询。并查看结果。请。
  • 啊,你是对的。抱歉,这是我第一次使用原始表达式。不过还是报错。新的查询和错误将在主帖中。不过,感谢您帮助我!
  • 如果您有属性linkname,则在您的表中images。试试select('link', DB::raw('count(favorites.id) as favs'))。您的表images 中似乎没有属性images。你能像我一样用DB 试试看它是否有效吗?
  • 好的,我尝试用 images.title 切换 images.link,我可以在我的 foreach 循环中打印出带有 {{ $image->title }} 的图像标题列表刀片模板,但是我无法打印任何其他属性,例如 {{ $image->description }}。理想情况下,我希望能够获取表格的所有属性。

标签: php laravel


【解决方案1】:

您的查询应该是。

$images = Images::join('favorites', 'favorites.image_id', '=', 'images.id')
->orderBy('favs', 'desc')
->groupBy('images.link')
->take(10)
->get(['images.link', DB::raw('count(favorites.id) as favs')]); 

【讨论】:

  • 感谢您的回复。但是我仍然遇到与顶部相同的错误,SQLSTATE[42S22]: Column not found: 1054 Unknown column 'images.link' in 'field list'
  • 嘿菲利克斯。 link 只是我编造的一个属性。把你自己的Image 模型属性。请。感谢帕特尔的加入。
  • 好的,我尝试用 images.title 切换 images.link,我可以在我的 foreach 循环中打印出带有 {{ $image->title }} 的图像标题列表刀片模板,但是我无法打印任何其他属性,例如 {{ $image->description }}。理想情况下,我希望能够获取表格的所有属性。
  • select('images.title', 'images.description', 'images.anything_else_you_want_to_display', DB::raw('count(favourites.id) as favs'))一样添加到select()中
【解决方案2】:

您可以像这样使用查询生成器:

$images = DB::table('images')
->join('favorites', 'favorites.image_id', '=', 'images.id')
->select('images.link', DB::raw('count(favourites.id) as favs'))
->orderBy('favs', 'desc') //order in descending order
->groupBy('images.link')
->take(10) //limit the images to Top 10 favorite images.
->get();

Eloquent 也可以做到这一点。

【讨论】:

  • 行 ->select('images.link', Images::raw('count(favourites.id) as favs') 给了我错误 Parse error: syntax error, unexpected ';' , 期待 ',' 或 ')'。如果我删除该行和之后的行,并且我只有 join 和 get,我没有错误。 (它返回所有收藏的图像)
  • nvm 它缺少右括号。现在我得到 strtolower() 期望参数 1 是字符串,给定对象
  • 哪一行会产生这个错误?此代码在我的计算机上运行良好(修复缺少的括号后)。
  • 不确定。但这是错误日志:paste.ofcode.org/RBG2sPHUqmrSmWrkbAVRS8
  • 我也在主帖中粘贴了我的查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多