首页 > 解决方案 > Make mode 属于多个其他模型

问题描述

我有以下3个模型:

class Guide extends Model
{
    protected $guarded = [];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function game()
    {
        return $this->belongsTo(Game::class);
    }
}

class User extends Authenticatable
{
    public function guides(){
        return $this->hasMany(Guide::class)->orderBy('created_at', 'DESC');
    }
}

class Gamee xtends Model
{
    public function guides(){
        return $this->hasMany(Guide::class)->orderBy('created_at', 'DESC');
    }
}

这个想法是用户应该为特定游戏创建指南。我目前的代码工作得很好,但我最近开始使用 Laravel 并且没有看到任何以这种方式完成的教程。有没有更好的解决方案,或者这完全可以吗?

标签: laravel

解决方案


那些雄辩的关系对我来说看起来很好。

如果数据库也正确设置,您可以对关系进行巧妙的处理。例如,我是这个函数的忠实粉丝with()

// Retrieve all users along with their guides and its game.
$users = User::with('guides.game')->all();

foreach ($users as $user) {
    foreach ($user->guides as $guide) {
        echo $guide->game->name;
    }
}

// Retrieve all guides along with its user and game.
$guides = Guide::with(['user', 'game'])->all();

// Retrieve all games along with its guides.
$game = Game::with('guides')->all();

推荐阅读