【问题标题】:Generate sugestions by genre id按流派 id 生成建议
【发布时间】:2020-06-05 19:50:52
【问题描述】:

使用 laravel 7 和数据透视表我有这样的东西:

型号:展示

public function genres()
{
    return $this->belongsToMany('App\ShowGenre');
}

型号:ShowGenre

public function shows()
{
    return $this->belongsToMany('App\Show', 'show_show_genre')->orderBy('name', 'asc');
}

在 mysql 数据库中,我有 show_genres,我将 show_id 和genre_id 放在其中。所以我想创建一些基于建议的东西。

在我的页面底部,我想显示 5 个具有相同类型的随机电视节目。一些电视节目有多种类型,所以我如何显示它并用 suma 5 限制它。

【问题讨论】:

  • 如果一个节目可以有多个流派,它是从任何流派中挑选节目还是只选择一种流派
  • 来自任何一种类型,并限制在 5 个。这比只来自一种类型的电视节目要好。

标签: laravel model recommendation-engine


【解决方案1】:

show_show_genre 应该有show_idshow_genre_id 因为show_show_genre 是数据透视表。 show_genres 不是数据透视表,因为它是代码中描述的流派表。此外,您不需要在 return 语句中设置 show_show_genre,因为 Laravel 会自动识别它是数据透视表。 试试这样的:

$show = Show::findOrFail($id);

$featuredShows = Show::whereHas('genres', function ($query) use ($show) {
    $query->whereIn('show_genres.id', $show->genres()->pluck('id')->toArray());
})->where('id', '!=' , $show->id)->with(['genres'])->inRandomOrder()->limit(5)->get();

【讨论】:

  • 这给了我一个随机类型的随机电视节目。实际上我有一个单独的电视节目,我在其中展示“实习医生格蕾”,它是戏剧和喜剧,我想要随机 5 个节目,其中是戏剧或喜剧类型,使用这两种类型创建随机 5 个电视节目,其中一些类型来自节目在浏览器中打开。
  • 您能否使用控制器的方法代码更新您的问题,以帮助我更好地了解您是如何获得该单一电视节目的,因为有问题的帖子没有说明它是如何选择的。 @PooX
  • 这只是 Show::FindOrFail($id);我认为你放 $query->where(['show_genres.id'] 的地方需要更改以从 show_show_genre 获取所有流派,其中 show_id 和流派以查找具有某些流派的所有其他电视节目。 ://
  • 谢谢,现在可以了。只需要一些修复,$show->genres()->pluck.. 我删除 (),所以 $show->genres->pluck.. 然后它完美地工作,就像我一开始想要的那样。还要感谢您展示了一些在 laravel 中获取数据的有用方法,这将对我未来的事情有所帮助。非常感谢。 :)
  • 也许我不明白(理解;虽然我知道你在对我说什么),但我也很困惑,为什么它不像我写的那样工作。但是,如果您将其用作基本解决方案,我会很高兴。 eloquent 成员(属性和方法)之间的区别:$show->genres 将返回集合,而 $show->genres() 将返回查询生成器。后者用于链接例如$show->genres()->where(['active' => 1])->get()。或者$show->genres 也等于$show->genres()->get()。 :) 快乐编码。另外,检查here,它将在代码中为您提供帮助
猜你喜欢
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
相关资源
最近更新 更多