假设我有一个用户模式,它将“爱好”链接到它,作为一个数组字符串。
我最近从 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/