当前位置: 首页 > 知识库问答 >
问题:

使用多对多关系的透视表创建一对多关系

公西苗宣
2023-03-14

用户表结构:用户

id、名称、用户名、密码、创建时间、更新时间

文章表结构:文章

id、标题、内容、创建时间、更新时间

关系表:文章\用户

id、文章id、用户id处于活动状态、创建时间、更新时间

标签

id、名称、用户id、创建时间、更新时间

透视表项目用户与标记的关系。表:文章\用户\标签

标签号,物品号,用户号

class User extends Model
{
    protected $fillable = ['name','username','password'];

    public function articles()
    {
        return $this->belongsToMany('App\Article')->withPivot('is_active')->withTimestamps();
    }

    public function tags()
    {
        return $this->hasMany('App\Tag');
    }
}

class Article extends Model
{
    protected $fillable = ['title','content'];

    public function users()
    {
        return $this->belongsToMany('App\User')->withPivot('is_active')->withTimestamps();;
    }

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

class Tag extends Model
{
    protected $fillable = ['title','content'];

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

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

我想连接这些表,以便可以像这样或类似的格式访问

$user->articles()->first()->tags;

并且应该能够创建/更新smth,就像这样

$user->articles()->first()->create(['title'=>'testing','content'=>'content'])->attach(['tag_id_1','tag_id_2','tag_id_3']);

非常感谢您的帮助

共有1个答案

袁枫涟
2023-03-14

试试这个:

class User extends Model
{
    protected $fillable = ['name','username','password'];

    public function articles()
    {
        return $this->hasMany('App\ArticleUser')->with('article');
    }

    public function tags()
    {
        return $this->hasMany('App\Tag');
    }
}

class ArticleUser extends Model
{
    public funciton article()
    {
        return $this->belongsTo('App\Article');
    }

    public function user()
    {
        return $this->belongsTo('App\User');
    }

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

class Article extends Model
{
    protected $fillable = ['title','content'];
}

class Tag extends Model
{
    protected $fillable = ['title','content'];

    public function articles()
    {
        return $this->belongsToMany('App\ArticleUser')->with('article');
    }

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}
 类似资料:
  • 我正在创建一个应用程序,其中用户可以被分配到多个组织,组织可以有多个用户--多对多的关系。 我希望能够这样做:以及 我有表... 我有表... 呃!用户-组织,组织-用户! 和我有数据透视/映射/等。表 表有一个字段和一个字段。 Elecoquent假设并期望-但这不是我为表命名的,也不想重命名。 我设置了以下内容 用户: 然后我测试一下: 并得到以下错误: SQLState[42S02]:找不到

  • 如果我尝试以下操作,则页面正在加载: 有以下表格:-用户-user_department-部门 数据透视表用户\u部门有两个外键:-部门\u id-用户\u id 在我的用户模型中: 在我的部门模型中: 顺便说一下:以下代码正在工作: 但是我无法在不破坏我的页面的情况下获得用户的部门。 有什么想法吗?

  • 问题内容: 伙计们,我正在努力为我的公司制作一个简单的票证生成系统,以吸引人。目前,我的MSSQL数据库中有一个名为的表,另一个名为的表。 我的应用程序是C#Windows窗体,因此在新的票证生成窗体上,我有许多文本框和一个用于分配工程师的comboBox,由填充。生成票证后,以这种形式输入的所有信息都将与from一起存储。 效果很好,但是后来我的客户要求我添加选项,以便可以在一张票上分配3名工程

  • 我还想知道如何定义每个模型上的关系--你是否需要或者是否可以只在用户上定义关系?

  • 问题内容: 我正在使用Microsoft SQL Server Management Studio,并且在创建联结表时是否应该为联结表创建ID列,如果需要,还应将其设为主键和标识列吗?还是为我要加入的多对多关系表保留2列? 例如,如果这将是多对多表: 我应该制作联结表吗: [并将我的主键用作身份列]? 或者: [并且只保留它没有主键或身份表]? 问题答案: 我将使用第二个联结表: 主键将是两列的组