【问题标题】:Retrieve Laravel Model results based on multiple ID's and first hasMany images table基于多个 ID 和第一个 hasMany 图像表检索 Laravel 模型结果
【发布时间】:2016-08-26 13:06:08
【问题描述】:

我已经使用 laravel 5 实现了finding locations with mysql 查询以在我的谷歌地图上查找最近的列表。

$query = DB::select(DB::raw('SELECT id, ( 3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(latitude) ) ) ) AS distance FROM listings HAVING distance < ' . $distance . ' ORDER BY distance') );
    $ids = [];

    foreach($query as $q)
    {
      array_push($ids, $q->id);

    }

它返回多个 id,然后我可以使用 whereIn 检索列表

$results = Listing::whereIn('id', $ids)->paginate(15);

现在的问题是,每个列表在不同的表(图像表)上有很多图像,我想检索第一张图像然后将结果传递给查看(列出所有列表和一张图像)

解决这个问题的正确方法是什么?

谢谢!

【问题讨论】:

    标签: php mysql laravel eloquent has-many


    【解决方案1】:

    这称为“按组选择”,有点小技巧。 MySQL 打破了 SQL 规范,它是如何做到这一点的,你应该知道,如果你打算与数据库无关,那么按组选择会给自己带来很多麻烦。

    因此,例如,如果您有 ListingImage 类:

    $listings = Listing::whereIn('id', $ids)->paginate(15);
    $images   = ListingImage::whereIn('listing_id', $ids)->groupBy('listing_id')->get();
    

    (另一方面,您可以使用$query-&gt;pluck('id') 来获取集合,而无需使用该循环。)

    【讨论】:

      【解决方案2】:

      我想你想得到:

      $listing = Listing::whereIn('id', $ids)-&gt;first();

      $listing 是第一个条目。

      【讨论】:

        猜你喜欢
        • 2015-04-15
        • 1970-01-01
        • 2018-07-21
        • 1970-01-01
        • 2017-11-15
        • 1970-01-01
        • 1970-01-01
        • 2020-01-29
        • 2017-08-02
        相关资源
        最近更新 更多