php - 如何在 laravel 模式构建器中创建 [anyType] 数组?
问题描述
假设我有一个用户模式,它将“爱好”链接到它,作为一个数组字符串。
我最近从 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
现在我想到了两个解决方案,一个是找到一种方法以某种方式将其实现为数组,或者,由于架构构建器不支持将数组类型放在这里,这不是我可以使用的最佳逻辑,我需要找到将我的“用户”模式添加到“爱好”数组的另一种方法。(我唯一能想到的就是创建一个“爱好”模式并使用雄辩的关系将它们绑定在一起,但这似乎不太实用)
解决方案
您可以创建一个 JSON 列来存储一个数组。
Schema::create('users', function (Blueprint $table) {
$table->string('username');
$table->string('password');
$table->json('hobbies');
然后在模型上,您可以在每次自动检索时将此列转换为数组。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'hobbies' => 'array',
];
}
正如另一个答案中提到的,关系数据库更常见的做法是创建一个额外的表来存储用户和爱好之间的关系。如果您需要任何排序、搜索、级联删除/更新等。创建多对多关系而不是存储为数组更实用。
推荐阅读
- mongodb - 如何在 MongoDB 聚合中展平嵌套数组(父->子)树(任何深度)?
- python - 如何连续改变颜色和文字?(图形用户界面,Python)
- google-query-language - 是否可以用文本替换 Google Query 中的空白单元格?
- r - 在 R 中调整日期
- python - 有没有办法让我的下拉菜单出现在 Toplevel() 窗口中,而它位于 Toplevel() 函数之外?
- javascript - 在 PHP 中关闭浏览器时如何更新数据库表的列?
- python - 从函数返回一个值,而无需等待它每次在 Python 中完成
- javascript - 无法在 monorepo vue 应用程序的故事书中使用 scss - 模块构建错误 lang="scss"
- python - 我可以在 Python 中的 Union 上拥有可变数量的类型吗?
- unity3d - (求帮助)URP 2D Point Light 越过阴影后面的墙?