检索所有变形的ByMany关系在Laravel Eloquent

2022-08-30 17:52:46

在 Laravel 文档中,有以下用于检索关系的示例,这些关系是多对多多态关系。morphedByMany

Laravel 多对多多态关系文档

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    /**
     * Get all of the posts that are assigned this tag.
    */
    public function posts()
    {
        return $this->morphedByMany('App\Post', 'taggable');
    }

    /**
     * Get all of the videos that are assigned this tag.
     */
    public function videos()
    {
        return $this->morphedByMany('App\Video', 'taggable');
    }
}

例如,我如何在一个查询/集合中获取所有关系的列表,然后如果我后来添加(或任何东西),那也是?morphedpostsvideosphotos


答案 1

我在这里使用了一个技巧:

为连接表创建模型并向模型添加关系。TaggabletaggablehasManyTag

public function related()
{
    return $this->hasMany(Taggable::class);
}

在模型中创建关系。TaggablemorphedTo

public function taggables()
{
    return $this->morphTo();
}

现在,您可以通过调用以下命令来获取正在使用该标记的所有模型:

$tagged = Tag::with('related.taggables');

答案 2

您是否想过使用集合的“联合”功能来合并所有不同的集合,以便检索所需的所有内容?

class Tag extends Model
{
    [...]

    /**
     * Get all of.
     */
    public function morphed()
    {
        return $this->video->union($this->posts)->all();
    }
}

推荐