如何构建 Eloquent 查询来检索主表的记录,在 Laravel 5 PHP 中对其相关表应用

使用 Laravel 文档中的示例多对多多态关系数据库结构如下:


posts

  id - integer

  name - string


videos

  id - integer

  name - string


tags

  id - integer

  name - string


taggables

  tag_id - integer

  taggable_id - integer

  taggable_type - string

我想检索OR 的post记录。post.name LIKE %laravel%tags.name LIKE %laravel%


如何使用 Eloquent 模型来构建这样的查询?这对我来说是一个很大的挑战,因为我只想获得名称由单词组成的laravel帖子或其相关标签的名称由相同单词组成的任何帖子。


SMILET
浏览 146回答 2
2回答

呼啦一阵风

您可以whereHas为此使用。从文档:如果您需要更多功能,您可以使用 whereHas 和 orWhereHas 方法将“where”条件放在您的查询上。这些方法允许您向关系约束添加自定义约束,例如检查评论的内容use Illuminate\Database\Eloquent\Builder;// Retrieve posts with at least one comment containing words like foo%...$posts = App\Post::whereHas('comments', function (Builder $query) {    $query->where('content', 'like', 'foo%');})->get();在你的情况下,它会是这样的:use Illuminate\Database\Eloquent\Builder;$input = 'laravel';Post::whereHas('tags', function (Builder $query) use ($input) {    $query->where('name', 'like', '%' . $input .'%');})->orWhere('name', 'like', '%' . $input . '%')->get();

叮当猫咪

这应该有效:$result = Post::whereHas('tags', function ($query) {    $query->where('name', 'like', '%laravel%')        ->orWhere('tags.name', 'like', '%laravel%');})->get();
打开App,查看更多内容
随时随地看视频慕课网APP