php - Laravel 的数据透视表 + 数据透视表

标签 php mysql laravel eloquent

什么是 laravel 数据透视表和一般的数据透视表?这是怎么回事?

最近我对数据透视表进行了研究。我以为我了解它们以及它们是什么,但后来我可能错了。

我一直认为数据透视表只是两个表之间的一个表(关系多对多)

但后来我开始了这项研究,结果碰巧不是那样,而是类似于普通表的不同架构,其中行是列。变了。

但是 Laravel 也有数据透视表。开始阅读文档并进行研究。也许我读错了,但它看起来就像 laravel 中的数据透视表 - 两个表之间的表,多对多。

在别处搜索,但找不到有关它的正确信息。

好吧,就这样吧。 Laravel 的支点只是多对多!

然后我开始了项目,今天我发现将这个中间表作为支点让我遇到了一个问题,我遇到了一个问题......分钟和小时......无法解决这个问题。

模型是class Room_Student extends Pivot

解决方法是什么?只需将其更改为 class Room_Student extends Model

我认为我不再了解数据透视表了,它们是不同类型的数据透视表吗? Laravel 的支点不同?

所以我的问题是,数据透视表到底是什么? + Laravel 的数据透视表。它们不同吗?这是关于什么的?

请帮助我理解这一点。

最佳答案

学习时,只关注 Laravel(或 eloquent)中的数据透视表概念。当我学习时,我并不关心数据透视表的一般含义。我只关注文档中的事实 (https://laravel.com/docs/5.5/eloquent-relationships#many-to-many)

多对多关系需要一个额外的表。我们也可以在这个表中插入其他有用的数据。并且可以作为系统中的模型使用。

示例: 用户和角色多对多关系 = User_roles

enter image description here

由于数据透视表,您可以将中间表数据作为模型检索(与系统中的其他模型一样)。

例子:

//get user by id
$user = App\User::find(1);

//get roles of this user
foreach ($user->roles as $role) {

  //pivot attribute returns a model which represent user_role table
  echo $role->pivot->created_at;

}

注意:您可以通过扩展 pivot 来创建一个类。但是您必须实现正确的关系才能使其发挥作用。您的代码应该类似于下面的代码。

class Student extends Model
{
    /**
     * The users that belong to the role.
     */
    public function Rooms()
    {
        return $this->belongsToMany('App\Room')->using('App\Room_Student');
    }
}

class Room extends Model
{
    /**
     * The users that belong to the role.
     */
    public function Students()
    {
        return $this->belongsToMany('App\Student')->using('App\Room_Student');
    }
}

class Room_Student extends Pivot
{
    //
}

我希望这会有所帮助。

关于php - Laravel 的数据透视表 + 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994355/

相关文章:

php - 从数据库输出所有内容后获取特定数据

php - 将站点连接到 phpMyAdmin 数据库

MySQL COUNT() 和重复项

php - 使用Carbon将日期转换为laravel中的毫秒

laravel - 如何避免自动 pull 请求中的符号链接(symbolic link)破坏?

PHP 控制运算符 (@) 不起作用

php - Codeigniter MySQL 将结果分组为多维数组

php - Laravel mailtrap 无法在本地主机上工作

php - 从容器中访问图像哈希

php - 处理大图像