php - 如何在 Laravel 架构构建器中制作 [anyType] 数组?

标签 php mysql sql laravel schema

假设我有一个用户模式,它将“爱好”链接到它,作为一个数组字符串。

我最近从 MongoDB 切换到 SQL,所以,我的第一个想法是像 Mongo 一样接近它,并做出这样的东西;

var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    hobbies: [String] });

所以,我尝试像这样对 Laravel 架构构建器实现相同的逻辑;

Schema::create('users', function (Blueprint $table) {
      $table->string('username');
      $table->string('password');
      $table->array(string('hobbies'));  //array(string("test")) is just a mock syntax, I just researched how can I implement an array type here and learned that I can't

现在我想到了两个解决方案,一个是想办法把它实现成一个数组, 或者,由于 schemabuilder 不支持在此处放置数组类型,这不是我可以使用的最佳逻辑,我需要找到另一种方法来将我的“用户”模式添加到“爱好”数组。 (我唯一能想到的就是创建一个“爱好”模式并使用 Eloquent 关系将它们绑定(bind)在一起,但这似乎不太实际)

最佳答案

最好的 方法是使用 Eloquent Relationships .我不确定为什么它在您的情况下不实用。

在您的特定情况下,User 可以有多个 Hobby 并且 Hobby 也可以属于多个 User.

这就是您的人际关系:

// in App\User.
public function hobbies()
{
    return $this->hasMany(Hobby::class);
}

// in App\Hobby
public function users()
{
    return $this->belongsToMany(User::class);
}

您需要在您拥有的两个表中相应地定义您的外键。此外,一个 many-to-many relationship需要第三张 table 。在您的情况下,它将被称为:hobby_user

要访问用户的爱好,您只需执行以下操作:

App\User::find(1)->hobbies;

虽然您也可以将爱好保存为字符串(.. 或 JSON ),但如果您想进行查询、报告等,以后可能会很麻烦。

关于php - 如何在 Laravel 架构构建器中制作 [anyType] 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54400246/

相关文章:

php - 你如何组织一个类中的方法和属性?

mysql - 外键关系约束 - 级联更新也外键 id 的其他值

mysql - int 和 varchar 数据类型需要使用多少字节来优化?

mysql - 在 PhpMyAdmin 中使用 SQL 删除列出的记录中的重复项

sql - 如何用日数据构造年数据?

javascript - 将 $FILE 数据发送到表单输入

php - 学习 PHP 的最佳堆栈是什么?

php - 客户模型中 Magento 中的 loadByEmail 和加载方法问题

MySQL。在序列化列中搜索数据

php - 创建从Linux终端获取的内网IP列表数据库的最佳方法(nbtscan或其他命令)