【问题标题】:Laravel get first item from collection if pivot table condition is true如果数据透视表条件为真,Laravel 从集合中获取第一项
【发布时间】:2020-04-06 19:08:40
【问题描述】:

假设我的数据库中有以下多对多多态关系。

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
    stuff - string

我从数据库中检索帖子。

$post = Post::find(1);

如何在stuff == something 处获取与此帖子相关的标签?我想创建函数,以便每次需要时都可以调用它。

此代码有效:

public function get_my_tag() {
    return $post->tags()->wherePivot('stuff', 'something')->first();
}

但每次我调用它时它都会从数据库中检索它。我需要一种将 $tag 存储在 $post 中的方法,所以无论我调用多少次get_my_tag(),它都应该只从数据库中检索一次。

【问题讨论】:

  • 我猜你需要使用急切加载Post::with('tags')->find(1)
  • @FelippeDuarte 我不想加载所有标签。只是一个特定的

标签: php laravel many-to-many pivot-table


【解决方案1】:

这样做

Post::with([
    'tags' => function ($query) {
        $query->where('any_field_on_tags_table', 'value');
    },
])->find(1);

你需要使用whereHas()方法

Post::with('tags')->whereHas('tags', function ($query) {
    $query->where('any_field_on_tags_table', 'value');
})->find(1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2017-05-17
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多